【问题标题】:MVVM to interact with a web-service in a 3-tiered applicationMVVM 与 3 层应用程序中的 Web 服务交互
【发布时间】:2012-05-22 07:09:02
【问题描述】:

问题:

将 MVVM 用于与 3 层应用程序中的 Web 服务交互的 UI 是否有意义?


详情:

  1. 应用程序的架构是三层的:

    Presentation Layer <--Web-Service-->| Business Layer | Data Access Layer

  2. 前端:.NET(WPF 和 C#)

  3. 后端:Java EE

对 UI 使用 MVVM 有意义吗?

  1. 模型如何抽象数据库,因为如果没有中间的网络服务,它就无法直接访问它?
  2. 如果实际上可以通过模型抽象数据库,那么这样做是否是一个好主意

其他注意事项:

不需要实时更新数据:

  • 数据库上的更新不需要立即反映在 UI 上,反之亦然。

  • 这让我觉得我不需要这样的模型。 MVVM 适合我的情况吗?


编辑

链接:

如果您可以发布指向已使用 MVVM 用于 3 层应用程序中的 UI 的项目的链接,将会有所帮助。

【问题讨论】:

    标签: wpf web-services architecture mvvm 3-tier


    【解决方案1】:

    MVVM中的Model不一定是数据库提供的。

    在这种情况下,我会将业务层发布的数据结构视为模型。

    数据库中的数据结构应该针对存储和查询进行优化。业务层公开的数据结构应该针对(所有)可能的客户端和带宽等考虑因素进行优化。

    客户端中的数据结构应该针对呈现进行优化,这就是我们在 MVVM 中所说的 Viewmodel。

    MVVM 非常合适,因为它允许您在业务层公开的数据结构和 UI 所需的数据结构之间进行转换。

    【讨论】:

    • 感谢您的回答,尤其是模型的清晰性。纠正我,如果我推断错误: 1. ModelBusiness Layer 公开的数据结构。 2. ViewModel 是对模型中数据结构进行优化以进行展示的抽象。我现在相信你的话,因为我很难被说服。除非我将 MVVM 概念应用到我的项目中,否则我不会真正理解它的含义和重要性。
    • 业务层公开的数据结构可能符合也可能不符合视图的要求。例如,BL 公开人员和部门,您创建的视图是显示特定部门人员的姓名。 ViewModel 可以简单地是一个包含字符串列表(名称)和字符串(部门名称)的类。所以 ViewModel 是一种数据结构,它为 View 提供符合要求的正确数据和功能。
    【解决方案2】:

    我在企业架构中看到了一个称为集成层的附加层。在 MVVM 的上下文中,我想这仍然“位于”Model 中,但它始终充当数据库和任何其他外部数据层之间的仲裁者。 在我看到的示例中,集成层连接了第 3 方 Web 服务、来自 WCF 服务的一些输入以及主应用程序数据库。

    我认为您可能对模型在 MVVM 中的含义有些不理解。这并不意味着 UI/Presentation 层会立即更新(但是可以这样配置),而是任何业务对象或数据访问组件都存储在模型中。也就是说,实际上并没有 VVM 这样的东西,因为 View Model 依赖于 Model 中定义的业务对象。 p>

    无论如何,我认为 MVVM 完全适合您所描述的内容,但许多其他架构也是如此。 MVVM 特别适合 WPF 前端,它非常适合 UI 数据绑定模型。 Model-View-Presenter 非常适合 Winforms 应用程序,因为状态的处理方式与 Model-View-Controller 不同,这对于 ASP.net 企业应用程序非常有用。所有这些架构都支持您在 OP 中描述的集成。

    请参阅How to store business logic in domain object? 了解我最近对 ​​MVVM 的描述。

    http://www.codeproject.com/Articles/66585/Comparison-of-Architecture-presentation-patterns-M 是一篇很棒的对比文章,很多内容来自 Martin Fowler - 许多企业软件架构和模式的先驱。

    【讨论】:

      猜你喜欢
      • 2012-11-15
      • 2011-05-05
      • 1970-01-01
      • 2012-11-30
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      • 2013-04-07
      • 1970-01-01
      相关资源
      最近更新 更多