Coo*_*eze 2 .net architecture wpf design-patterns mvvm
我是WPF和MVVM的新手.这就是我通常为ASP.net应用程序设置我的架构的方法:
数据层
我通常使用ORM工具将数据持久化到数据库.
业务层
这包括我的所有业务模型和业务逻辑.
服务层
该层用作后端系统的入口点.(有时通过WCF).该层负责将业务模型转换为View模型.
表达层
该层用于表示逻辑.
我知道MVVM的视图是.XAML文件并驻留在WPF应用程序中.但是我对"模型"和"ViewModel"有点困惑,因为我的业务层中已经有一个"模型",而我的ServiceLayer中有一个"ViewModel".我可以使用这些,但这意味着我的服务层将绑定到特定的实现,因为它需要包括:RelayCommand,Oberservable Objects等.
这个问题的推荐方法是什么?我错过了什么吗?是否应该有另一层抽象,以便表示层(WPF)包括"View","ViewModel"和"Model"?
MVVM的一个更合适的名称是View - ViewModel - Model,因为它可以表达它们实际上是如何分层的.ViewModel用于使您的模型适应视图.这是通过绑定属性实现的.
View需要知道的关于ViewModel的唯一内容是它公开了哪些属性.ViewModel不需要了解有关View的任何信息.它们INotifyPropertyChanged
根据您配置绑定的方式通过这些ViewModel属性进行通信(因此属性值从ViewModel流向View,反之亦然或两者兼而有之).
它们之间的另一种常见通信方式是由接口调用的命令,以响应某些用户操作(典型示例,按下按钮).View还可以通过绑定调用命令,ViewModel可以注册处理程序以响应Command调用.
通过对命令和PropertyChanged
事件作出反应,您的ViewModel可以充当模型的控制器.如何访问模型取决于您的设计,您可以使用不需要了解ViewModel,命令,属性或其他内容的服务层.您的ViewModel只是在响应用户操作时与其交互,并更新其自己的属性以通知View的结果.
请注意,服务层公开的模型不需要与业务层内部使用的模型相同.例如,您的服务层可能使用DTO与ViewModel进行通信,并且DTO可能与您的业务模型对象明显不同.
这只是WPF可能的分层架构的快速总体情况,您可以使用更多选项,模式和工具.(通过搜索MVVM,你可能会找到比这更好的解释.)
编辑回答评论问题
所以你基本上说"View"和"ViewModel"应该在WPF项目中,而"Model"本质上是从服务层传递的内容?
是的,View和ViewModel通常驻留在同一个项目中.典型的设置是创建View和ViewModel文件夹,并为每个视图提供ViewModel - 甚至在同一个文件夹中.
在大型项目中,View和ViewModel可能位于不同的程序集中.如前所述,ViewModels独立于绑定到它们的Views:它们不需要知道有关View的详细信息,这使得它们对测试友好.但是,由于它们非常紧密地协同工作,因此将ViewModel与View(及其要求)一起设计是很常见的,因此具有高度耦合性,这使得它们的重用不太可能(因此,它们最终会在同一个程序集中).
归档时间: |
|
查看次数: |
3361 次 |
最近记录: |