我从线分叉When using MVVM pattern, should code relating to property changes go in the setter or an event?Silverlight/MVVM设计:我的模型是什么,在哪里放置逻辑?
我的MVVM模式的理解与视图和视图模型零件OK ......
但对于Model部分?它是技术对象模型(EntityFramework SelfTracking生成的类,然后位于Web服务后面,然后是服务器中的所有业务逻辑)或应用程序逻辑模型(我们将在Silverlight客户端上基于实体类当然,感谢PRISM项目链接器,它会呈现面向GUI的操作,并提供更多业务逻辑,并封装脏的技术内容以访问WS以将实体上的修改传播到数据库)?
(Personnaly,我想第二个的)
在我们的Silverlight/WCF(不RIA)的项目,我们管理的文件。我们有用于显示这些文档的视图(例如InboxView.xaml),该视图粘贴到InboxViewModel.cs中,其中包含要显示的文档列表。 InboxView中的ListBox是DataBound到InboxViewModel中的DocumentList ObservableCollection属性。但是列表框ItemTemplate是DataBound到DocumentViewModel.cs,它封装了实体生成的Document.cs类。
点是这个DocumentViewModel实际上是由其他视图使用...(对我来说部分合适,如果MVVM确实规定了Views和ViewModels之间的双射,但这不是我的观点......)。
在我看来,我宁愿有一个DocumentModel.cs而不是DocumentViewModel.cs,它可以被几个ViewModel(InboxViewModel,EditDocumentViewModel ...)共享,并封装对WS的调用以触发业务操作服务器端与客户端修改实体。然后,我们将在ViewModels(MV-VM)和视图(M-视图模型)中具有应用逻辑模型或面向GUI的模型(M -V-VM) V -VM)。所有在Silverlight方面。
但随后2个问题:
1 - 如果保留我的愚见,这将是确定直接数据绑定一个ItemTemplate到模型对象?由于没有任何视图直接绑定到DocumentModel,而是绑定到InboxViewModel(例如,它是DocumentModel对象)中的属性?
2-更一般地说,服务器端和客户端实现业务逻辑的部分是什么?由于服务器旨在将WS展示给其他(虚构的未来或未来虚构:p)应用程序,我们真的想要将所有第一个应用程序业务逻辑放在服务器中,还是只通过WS公开所有原子操作,并让所有应用程序实现其正确的逻辑呢?
我的技术领导不断给我提供参考,但他/他没有给我任何答案,而且,我只是想在我自己这里思考。
感谢所有你们的...... 干杯
+1我同意您的整体评估。一些注释:“A”与MVVM无关 - 它是整体架构的一部分(VM可能参考),但不属于UI开发的关注点。此外,“B”和“C”有时可能重叠,甚至相同,这取决于您的系统。我同意“E”,但我已经看到团队对ViewModels执行1:M或M:1视图并使其工作。 – 2011-04-07 20:20:01
谢谢菲尔。 A,B和C都是整个模型层的一部分。服务层是ViewModel与B进行通信以检索B和/或C.是的,B&C可以重叠,有时它可以,有时不会。我不是故意暗示我的方式是最好的,只是我一直在想的东西:-)例外是我对E的立场:虽然你可以用其他方法取得成功,但从长远来看,它只会导致麻烦和挫折。 – 2011-04-07 20:53:58