代码之家  ›  专栏  ›  技术社区  ›  Justin Bozonier

我应该在WPF中将业务对象与UI分开吗?

  •  2
  • Justin Bozonier  · 技术社区  · 17 年前

    WPF面向视图模型的做事方式使得在UI中使用业务对象变得非常诱人。你看到这个有什么问题吗?你为什么或为什么不这样做?

    5 回复  |  直到 17 年前
        1
  •  6
  •   Philipp Schmid    17 年前

    微软产品团队的指导(例如,Blend团队正在使用)是Model-ViewViewModel架构,这是流行的MVC模式的变体。一个好的起点是 http://blogs.msdn.com/johngossman/archive/2005/10/08/478683.aspx WPF博士也有关于这个主题的好文章。

    本质上,他们主张创建一个ViewModel层,该层使用绑定友好的业务对象,如ObservableCollection等。

    此外,如果您最终可能会迁移到Silverlight 2,您可能希望将业务对象排除在UI层之外,这样您就可以交换UI技术(直到WPF和Silverlight变得兼容源代码)。

        2
  •  2
  •   Inisheer    17 年前

    我想我是从另一个角度看待它的。我尽量避免使用UI,这样我就可以使用我需要的任何UI演示文稿(即web、WPF、WinForms)。表示层中的业务逻辑越多,如果您迁移到不同的UI,以后可能需要重写的内容就越多。

        3
  •  2
  •   Ryan Lundy    17 年前

    在UI中拥有业务对象不是问题,只要你所做的就是 查看 他们。换句话说,如果你想更改一个的属性,或删除一个,或创建一个新的,你应该向控制器、演示者或其他任何人发送一条消息;然后应在视图中更新结果。

    什么你 不应该 做就是使用 ToString 对象的方法(或对象上的任何其他方法或属性)来影响它们在视图中的显示方式。你应该使用 DataTemplate s表示对象的视图。如果你需要一个更复杂的表示,你可以使用 IValueConverter 将对象转换为其视觉表示。

        4
  •  1
  •   Nic Wise    17 年前

    我不是WPF大师,我不能确定,但通常将M、V和C分开的原因是,这样你就可以独立于视图测试控制器,反之亦然。

    当然,没有什么能阻止你,但如果它是独立的,它应该更容易测试(即单元测试)。MVP模式通常是微软推广的模式,它更倾向于让演示者(即你的WPF表单)拥有更多的控制权,这也很好。...

        5
  •  1
  •   Bogdan Maxim    17 年前

    根据您的应用程序架构或您计划重用组件和对象的方式,您可以选择与用户界面(在本例中为WPF)有一定程度的独立性。

    以下是我的经验示例:

    我只使用过WPF一点点 一个相对较小的项目,其中 业务层已经定义, 我们只需要创建一个用户 界面。当然,界面 已经定义了自己的规则和对象 它正在与之合作,因为 该应用程序仅为 我们选择创建自己的用户体验 特定对象,主要是通过扩展 DependencyObject (主要用于 Data Binding 目的)。

    有些人可能会说这不好 使用依赖对象,因为它们 不可序列化(实际上它们 对于XAML),它们带来了 对WPF的依赖( System.Windows 命名空间),以及一些 其他论点。也, DependencyObjects 支持其他 选项,如 attached properties dependency properties .其他 可能想使用例如 INotifyPropertyChanged 如果 有道理,其他人可能会说 所有这些模式都不属于 除了UI之外的其他层。 (如果你想了解更多,有 一些优秀的WPF data binding articles 在MSDN库中, 包括以下方面的最佳实践 性能和用户界面)

    微软选择为微软增添一些好处,这有点糟糕 系统。窗户 命名空间,而不是例如 System.ComponentModel 在我看来,它们可能更有用(通过不仅为WPF而且为.NET Framework提供所有这些重要模式)。

    当然,这只是开始,我们中的许多人都知道,事情最终会朝着正确的方向发展。(有偏离主题的风险:以silverlight 2.0框架为例。这是一个仓促的发布,WPF模型中的一些对象缺失,一些对象不在其自然位置。)

    最后,一切都取决于你、你的编程风格、你的架构决策和你对技术的了解。

    如果以某种方式做这件事似乎比照本宣科更自然,那就想想 why you should why should you not 在做出任何决定之前!