我的一位同事并不想直接从View绑定到模型。例如,在Model中,他有一个ObservableCollection,在View中他想使用它。而不是像我一样直接使用它(例如{Binding Model.Collection}
,他在ViewModel中有另一个ObservableCollection,它与模型中的ObservableCollection具有完全相同的数据。他通过事件将两个ObservableCollections彼此同步。
他的方法有什么好处?我个人不赞成他的方法,因为它只是添加了重复的代码,因为你必须自己同步ObservableCollections,它也更容易出错。我的同事说他想这样做,因为他可以在不改变视图的情况下改变模型。
修改
答案 0 :(得分:4)
这一切都归结为代码分离和可重用性。理想情况下,View应与Model完全分离。如果View不依赖于Model的特定实现,那么可以使用不同的模型重用它来呈现其他一些数据。
因此,假设您有一个AlbumView
并且您当前的模型是Album
,但将来您还决定将Movie
或Book
添加到您的库中。您仍然可以使用相同的AlbumView
o来显示您的电影和书籍对象。此外,如果您想创建一个与专辑有关的新项目,您可以简单地重复使用您的专辑类,因为它不依赖于任何视图。这是MVVM或MVC的优势。
对我来说,我会说,你的同事是对的,因为Model自然地反映了数据访问层实体,它将被存储和处理。除此之外,Model还可能具有与Access数据层相关的更多属性,例如created
indexing
。虽然ViewModel
仅与应用程序的视图和表示逻辑相关。它只反映用户将要看到的内容。
答案 1 :(得分:2)
我想说在thread_number
图层中使用ObservableCollection
是错误的。通过添加你基本上说" Model
对象存储数据并在它发生变化时通知"。
Model
的作用是操纵ViewModel
并为Model
提供View
的界面。
我相信你的同事是对的,因为他正在强制分离关注点,以致操纵Model
不应影响Model
。