日期:2014-05-20  浏览次数:21341 次

业务软件的MVVM和N层架构
发表下不成熟的看法,业务软件的MVVM和N层架构。

表示层(WPF应用程序)对应MVVM的View
业务逻辑层(Domain Model)对应MVVM的ViewModel
对数据访问层服务的引用(WCF) 对应MVVM的Model
数据访问层
数据层 

1.“表示层”是指用户与应用程序进行交互时所在的层。 它通常还包含附加的应用程序逻辑(AppLogic)。
2.“业务逻辑层”是指用业务规则和数据计算。典型的Domain Model。它通常还包含为表示层提供的实体数据类。
3.“对数据访问层服务的引用”是指用WCF彻底的把业务逻辑层和数据层给分开,数据层作为服务被业务逻辑层提供数据。
4.“数据访问层”这里要重点说一下。
“数据访问层”又分为以下几个模块
①数据逻辑层DALC(Data Access Logic Component )是指处理与数据逻辑相关的层。
②数据集DateSet是指在内存中像一个完整的数据库,支持数据库断开连接,对于大数据使用分页来处理。他可以接受来自不同数据库或文件的数据。
③DBA(DateBaseAccess)是指彻底把数据访问层与数据层隔开,如果变更数据源(SQLServer→MYSQL)不需要变更代码。提供数据库的一些通用功能,如数据库备份还原压缩等。
5.“数据层”是存储应用程序数据的服务器(例如,运行 SQL Server 的服务器)。

现在正在由下向上实现中,有什么好的见解或文章欢迎共享。特别是关于DBA的,哈哈!

------解决方案--------------------
(Data)Model-View-ViewModel模式跟经典的Model-View-Presenter模式很相似,除了需要一个为View量身定制的model,这个model就是ViewModel。ViewModel包含所有由UI特定的接口和属性,它们是轻松构建UI的必要元素。View绑定到ViewModel,然后执行一些命令在向它请求一个动作。而反过来,ViewModel跟Model通讯,告诉它更新来响应UI。
http://weblogs.asp.net/craigshoemaker/archive/2009/02/26/hands-on-model-view-viewmodel-mvvm-for-silverlight-and-wpf.aspx
------解决方案--------------------
非常感谢1楼对MVVM的经典解释,以及提供的资料(视频时间有点长,还没看完呢!呵呵)。

------解决方案--------------------
一篇介绍数据层组件设计的文章
http://msdn.microsoft.com/en-us/library/ee817644.aspx(英文原址http://msdn.microsoft.com/en-us/library/ee817644.aspx)
------解决方案--------------------
中文
http://www.yesky.com/20021112/1639500.shtml
------解决方案--------------------
探讨
>4.“数据访问层”这里要重点说一下。
>“数据访问层”又分为以下几个模块
>①数据逻辑层DALC(Data Access Logic Component )是指处理与数据逻辑相关的层。
>②数据集DateSet是指在内存中像一个完整的数据库,支持数据库断开连接,对于大数据使用分页来处理。他>可以接受来自不同数据库或文件的数据。
>③DBA(DateBaseAccess)是指彻底把数据访问层与数据层隔开,如果变更数据源(SQLServer→MYSQL)不
>需要变更代码。提供数据库的一些通用功能,如数据库备份还原压缩等。

------解决方案--------------------
前提知识:
用Visual Studio 2010可以自动生成Dataset的XSD(http://msdn.microsoft.com/zh-cn/library/04y282hb.aspx),但是自动生成的代码里面对特定的数据引擎具有硬编码依赖性,如SqlDataAdapter SqlConnection SqlTransaction SqlCommand都被硬编码在XSD中了。

除了上面仁兄做的数据通用层的功能外我想这么做:
把DataAdapter Connection Transaction Command也在DBA中进行封装,然后做一个代码自动生成工具把XSD转化为使用DBA中封装了的DataAdapter等(参考http://xsd2code.codeplex.com/),这样就可以把②数据集DateSet与具体的数据引擎隔开。
------解决方案--------------------
有什么好的见解或文章欢迎共享。
------解决方案--------------------
Domain Model
http://www.javaeye.com/topic/9685
------解决方案--------------------
学习了......
------解决方案--------------------
ViewModel不对应业务逻辑层,它还是跟UI表现相关的