严格分离View和Model的好处?

时间:2016-10-28 10:19:14

标签: c# mvvm observablecollection

我的一位同事并不想直接从View绑定到模型。例如,在Model中,他有一个ObservableCollection,在View中他想使用它。而不是像我一样直接使用它(例如{Binding Model.Collection},他在ViewModel中有另一个ObservableCollection,它与模型中的ObservableCollection具有完全相同的数据。他通过事件将两个ObservableCollections彼此同步。

他的方法有什么好处?我个人不赞成他的方法,因为它只是添加了重复的代码,因为你必须自己同步ObservableCollections,它也更容易出错。我的同事说他想这样做,因为他可以在不改变视图的情况下改变模型。

修改

一些高度赞成的答案[1] [2] [3]支持我的想法,直接绑定到模型真的没问题。

2 个答案:

答案 0 :(得分:4)

这一切都归结为代码分离和可重用性。理想情况下,View应与Model完全分离。如果View不依赖于Model的特定实现,那么可以使用不同的模型重用它来呈现其他一些数据。

因此,假设您有一个AlbumView并且您当前的模型是Album,但将来您还决定将MovieBook添加到您的库中。您仍然可以使用相同的AlbumView o来显示您的电影和书籍对象。此外,如果您想创建一个与专辑有关的新项目,您可以简单地重复使用您的专辑类,因为它不依赖于任何视图。这是MVVM或MVC的优势。

对我来说,我会说,你的同事是对的,因为Model自然地反映了数据访问层实体,它将被存储和处理。除此之外,Model还可能具有与Access数据层相关的更多属性,例如created indexing。虽然ViewModel仅与应用程序的视图和表示逻辑相关。它只反映用户将要看到的内容。

答案 1 :(得分:2)

我想说在thread_number图层中使用ObservableCollection是错误的。通过添加你基本上说" Model对象存储数据并在它发生变化时通知"。

Model的作用是操纵ViewModel并为Model提供View的界面。

我相信你的同事是对的,因为他正在强制分离关注点,以致操纵Model不应影响Model