WPF的处理视图模型的方式使得在UI中使用业务对象变得非常诱人。你有没有看到这个问题?为什么或为什么不这样做?我应该让业务对象与WPF中的用户界面分开吗?
回答
微软产品团队的指导(例如Blend团队正在使用的)是Model-View-ViewModel架构,这是流行的MVC模式的变种。一个好的起点是http://blogs.msdn.com/johngossman/archive/2005/10/08/478683.aspx。 WPF博士在这个话题上也有很好的文章。
基本上,他们主张创建一个ViewModel层,该层使用绑定友好的业务对象,如ObservableCollection等。另外,如果您最终可能迁移到Silverlight 2,那么您可能希望将业务对象保留在UI层之外,以便您可以更换UI技术(直到WPF和Silverlight与源代码兼容)。
不是一个WPF大师,我不能确定,但分离你的M,V和C的通常原因是你可以独立于视图测试控制器,反之亦然。
当然,没有任何事情会阻止你,但是如果它是分开的,它应该有更多的可测试性(即单元测试)。 MVP模式,通常是MS推广的模式,更多地围绕主持人(即您的WPF表单),具有更多的控制权,而且这也很好......
我想我看到它在不同的光。我尝试尽可能地避免使用UI,因此我可以使用任何需要的UI呈现(即web,WPF,WinForms)。表示层中的业务逻辑越多,如果您迁移到不同的用户界面,则以后可能需要重写的内容越多。
只要你正在做的事情是查看他们这不是在UI中的业务对象的问题。换句话说,如果你想改变一个属性,或者删除一个属性,或者创建一个新属性,你应该发送一条消息给控制器,主持人或者其他任何要做的事情;然后应该在视图中更新结果。
什么你不应该做的是使用你的对象(或你的对象的任何其他方法或属性)的ToString
方法来影响他们会如何出现在视图中。您应该使用DataTemplate
s来表示您的对象的视图。如果您需要更复杂的表示形式,则可以使用IValueConverter
将对象更改为其可视表示形式。
根据您的应用程序体系结构或您计划重新使用组件和对象的方式,您可以从用户界面(本例中为WPF)中选择一定程度的独立性。
这里是我的经验样本:
我曾与WPF只是一点点工作,在 一个相对较小的项目,其中已经定义了 业务层, ,我们只需要创建一个用户界面。当然,接口 已定义它自己的规则和对象 ,它正在与工作,而且由于 应用大部分是通过扩展
DependencyObject
(主要用于定义只是我们选择创建自己的 特定对象, UXData Binding
目的)。有些人可能会说,这是不正常 使用依赖对象,因为它们 不是可序列化(实际上他们 是 - 对XAML),他们带来了 依赖于WPF(在
System.Windows
命名空间),以及一些 其他论点。此外,DependencyObjects
支持其他 选项,如attached properties 和dependency properties。其他 可能喜欢使用例如INotifyPropertyChanged
如果它 是有意义的,而其他人可能会说 所有这些模式不属于 其他层比UI。 (如果您想了解更多有 一些很好的WPF data binding articles在MSDN库, 包括 性能比较和用户界面的最佳实践)
这是一种糟糕的是微软选择添加一些的例如System.Windows
命名空间的好处,而不是像System.ComponentModel
那样,在我看来它们可能更有用(通过提供所有这些重要模式不仅适用于WPF,还适用于.NET框架)。
当然这只是一个开始,我们中的许多人都知道,事情将最终演变到正确的方向。 (具有脱离主题的风险:以Silverlight 2.0框架为例,这是一个匆忙释放,WPF模型中的一些对象丢失,有些不在其自然位置。)
在最终,一切都取决于你,你的编程风格,你的架构决定和你对这项技术的了解。
如果用某种方式做这件事比看书更自然,那么在做出任何决定之前,请考虑
why you should
和why should you not
!
- 1. 我应该从MVC应用程序中的Views中迭代业务对象吗?
- 2. 我应该让对象变化吗?
- 3. 业务逻辑应该与模型分开吗?
- 4. 一个或两个用户界面分开业务功能?
- 5. WPF业务对象
- 6. 业务对象或实体应该自我验证吗?
- 7. 我应该公开构图对象吗?
- 8. 业务对象应该知道它对应的合同对象
- 9. 用户对象对话框 - 不打开(业务对象)
- 10. 我应该让QFile(或fstream)打开吗?
- 11. 服务引用我的wcf服务问题与客户端对象,没有打开/关闭的界面?
- 12. 动态用户界面,WPF与否?
- 13. 我应该在我的商业应用程序中使用开源软件吗?
- 14. 分离用户界面/业务逻辑 - JavaScript/jQuery
- 15. 如何从用户界面分离业务逻辑
- 16. 我应该使用Tiles对象吗?
- 17. 我应该使用Expression Blend来设计真正动态的用户界面吗?
- 18. 您的开发用户界面应该与最终产品相似多少?
- 19. 业务用户界面的Web服务测试框架
- 20. 我的MVC控制器应该是面向对象的吗?
- 21. 我应该如何登录Android的用户界面?
- 22. 我应该初始化对象值吗?
- 23. 我应该重写==对象和MyType吗?
- 24. 我应该使用界面生成器吗?
- 25. 我应该使用反射(C#)结合界面实现吗?
- 26. 管理界面:我应该使用Bootstrap吗?
- 27. Javascript的专业用户界面
- 28. 我可以在我的用户界面的中间部分放置googlemap吗?
- 29. MEAN Stack - 我应该分开服务器吗?
- 30. 会员用户业务对象
这是我的一个担忧......我不确定ROI是否有很大不同(假设只是对象是共享的而不是业务逻辑) – 2008-11-03 17:20:44