3

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

  • 主项目- 包含所有视图(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 层可以驻留在不同的层(服务器)中吗?如果是这样,是否推荐?那怎么能做到呢?

谢谢!

4

2 回答 2

7

View Model无论你怎么称呼它,最后都是Object保存在计算机内存中的一个实例。就像任何其他实例化类一样。其目的是连接View和Model,访问各种BL方法等。

即使将视图模型的实例从某个服务器传递到客户端是可行的(假设您在服务器上对其进行二进制序列化并在另一端对其进行反序列化) - 否则会产生巨大的开销(无论是在网络上还是在 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

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

于 2012-12-12T15:05:23.557 回答
1

让我们从显而易见的开始:

  1. ViewModel 不在服务器上。它们的作用是使来自多个服务/模型的数据可用于视图,并提供视图和数据之间的链接。没有人这样做,也没有人会认为这是个好主意。曾经。
  2. 您的数据层可以以最少的干预存在于您希望它存在的任何地方。

将讨论您的业务逻辑层有多少/很少向上移动以成为 WCF 层以及客户端计算机上将保留多少。这才是应该讨论的内容。

如果您的同事坚持认为视图模型应该在服务器上,请让他/她对其进行原型制作。它应该非常有趣。

于 2012-12-12T15:04:44.490 回答