MVVM WPF在三层架构中的应用

Ado*_*rez 1 wpf mvvm n-tier-architecture

我目前正在使用MVVM设计模式开发Enterprise WPF LOB Desktop应用程序。我当前在开发机器中的解决方案结构如下:

  • 主项目 -包含所有视图(XAML)的WPF应用程序
  • 视图模型 -包含备份主项目中视图的所有视图模型
  • BLL -业务逻辑层
  • DAL-数据访问层-连接到MS-SQL服务器并调用存储过程
  • 模型 -包含所有业务实体

我目前不使用WCF,因为目前所有内容都驻留在同一台计算机上,但数据库位于其自己的服务器中。但是,将来我们计划将代码库分为3层。

我的问题是,一位同事坚持认为,我们应按以下步骤在3台单独的服务器/机器中拆分应用程序:

  1. 表示层 - 用户计算机中的客户端WPF应用程序(View)。这也可能是Web客户端应用程序
  2. 逻辑层服务器 -视图模型+模型+业务逻辑层+数据访问层
  3. 数据层服务器 -数据库服务器

我无法想象的视图模型从分开居住(不同的服务器)查看,他声称,应该是可能的。

编辑:我的同事声称,在服务器端具有视图模型将简化将来的任何部署,并使它更易于维护,因为更改只会在服务器端进行。但是,我已经使用ClickOnce部署了.NET应用程序,但这并不是什么大问题。

根据我的阅读,您可以在用户计算机上安装一个包含View和ViewModel的WPF客户端应用程序,然后通过诸如WCF的通信层在较低层公开服务。

该答案在另一篇文章中指出: “在MVVM中,UI层分为两层:负责应用逻辑的ViewModel和仅负责演示的View。” 基于此,我的基本问题是,View和ViewModel UI层可以位于单独的层(服务器)中吗?如果是这样,建议吗?以及如何实现?

谢谢!

Bla*_*hma 5

最终View Model,它称为Object计算机内存中保留的实例。就像其他任何实例化类一样。其目的是连接视图和模型,访问各种BL方法等。

即使将View模型的实例从某个服务器传递到客户端是可行的(假设您在服务器上对它进行二进制序列化,然后在另一端进行反序列化)-否则会产生巨大的开销(在网络和在CPU)上,我看不出它如何将有可能使事情变得更容易,在我想明白相反如何这将让事情变得更容易维护。

视图和视图模型都应该在客户端。例如

Presentation Tier - The client WPF application (View + View Models)
Logic Tier server - Model + Business Logic Layer + Data Access Layer
Data Tier server - The database server
Run Code Online (Sandbox Code Playgroud)

考虑到这种分离,他是正确的,即在BL或DAL中所做的更改将不需要创建客户端的新版本(只要您不破坏任何接口,不更改模型等)。