谈谈对于企业级系统架构的理解

在我们刚开始学习架构的时候,首先会想到分层的概念,分层架构比较经典的是三层架构,那么,什么是三层架构呢?它包括表现层,业务层,数据访问层;而对于一个新手来说,从抽象意义上的三层架构,逻辑上就划分为三个层。

image

这个是最基本的三层架构模式。

表现层充当系统的界面呈现以及UI逻辑的角色,也就是说,UI(用户界面)属于表现层;

举一个对于asp.net WebForm来说,人们喜欢把对于UI的控制逻辑(服务器控件的读取、设置、事件等等)写在页面的后置隐藏代码中,并且依赖业务逻辑层。当然,服务器控件支持数据绑定的功能,可以通过数据源进行绑定控件。这样就可以节省在后置隐藏中的代码。

 

因此,我们就可以把表现层分为UI用户界面以及UI逻辑:

image

UI用户界面的职责只是作为数据输入和输出后的展示工作。

UI逻辑的职责是负责业务逻辑层以及UI用户界面之间的数据交互,并且尽可能地让UI逻辑不依赖于UI技术

其中UI用户界面的实现方式有很多,包括ASP.NET,WinForm,WPF,Silverlight,移动Web,智能设备等等。

image

将表现层中UI页面和UI逻辑分离的策略中,当前使用最多的两种模式是MVC模式和MVP模式。

MVC模式,即模型-视图-控制器模式,通过视图触发并执行某个操作,调用控制器,通过控制器去操作业务层,最终返回模型,在视图中进行展示。这里的模型可以是一个领域模型(DM),也可以是一个数据迁移对象(DTO)。

MVP模式,即模型-视图-展示器模式,和MVC模式有点像,不同的是MVP中视图和模型是被完全分离出来的,视图中定义一个接口,而展示器通过调用该接口的方法以控制视图。因此,视图和模型是松散的,展示器也充当了一个控制器的角色,同时它也不依赖于UI技术。

另外再介绍一种模式PM(Preentation Model),它可以说是MVP的变体,在PM中,视图不定义接口,这里的模型只是表示视图状态的类,视图中的元素被直接绑定到模型属性上。例如在WPF中,WPF就先天的具有数据双向绑定机制以及事件通知属性机制。

所以它特别适用于WPF,Sliverlight等等。

image

 

在开始业务层之前,不得不说一个前提,在一个小型项目中,直接让表现层调用业务层,足以解决所有问题。但是,当项目大到使用多种表现形式,如使用了各种UI技术,ASP.NET,WPF,移动设备等等,就要考虑在你的表现层和业务层之间增加一个层,以至于让表现层和业务层解耦,因为业务层作为一个业务中间件的平台,最好不要暴露于表现层中,这个层就是传说中的服务层。架构图又演化为:

image

服务层实际上并不执行任何具体的工作,其功能在于组织各个业务对象,服务层将业务层所有的细节对表现层都隐藏起来,服务器将组织业务逻辑层中的组件,并且通过数据迁移对象(DTO)与表现层交互,因此就产生一个DTO模型。

为了实现服务的可重用性,需要使用服务接口,表现层通过规定的接口访问功能。服务的实现继承服务接口,而服务的实现专注于业务层的调用

image

对于服务层,常用的方法包括Web服务、.NET Remoting、Rest以及WCF技术。

本人比较建议使用WCF作为服务,因为可以方便地通过配置达到远程调用服务的目的。

服务层消除了两个表现层和业务层之间的耦合,服务层可以实现一个远程接口,达到多UI技术甚至多平台上的通信。

当然增加服务层也有缺点,假如使用WCF服务,会增加系统的调用开销,进而影响性能。

image

 

业务层中包含系统所需要业务过程上的实现,并与下层的数据访问层交互。

我们通常也叫做业务层叫做业务逻辑层,但我认为业务逻辑层是属于业务层的一方面,业务逻辑更专注于业务上逻辑算法的实现。因为业务层还可以包括其他的方面。

业务层必须包括对业务实体尽心建模的对象模型,表达了客户的所有策略和需求的业务规则,因此就产生了领域模型

(PS:如果这里你不使用领域模型,那么需要采用业务规则层进行业务功能上的业务规则的验证和控制)

领域模型包括对实体的属性定义,方法定义以及实体与实体之间的关系。从这个角度上看,UML建模至关重要,通过对UML动态图和静态图的描述,可以映射到领域模型中。

从服务层刚才讲到了DTO模型,这里需要一个机制将DTO转化为领域模型,所以产生了DTO映射层(DTOMapper)。

另外业务层还包括核心中间件技术,包括第三方组件,以及工作流引擎等等。

image

 

业务层需要考虑到一些与数据访问层交互的设计模式,模式中包括事物脚本模式、表模块模式、活动记录模式、领域模型模式。

事物脚本模式是通过方法来执行业务流程,它是一个过程式模型,事物脚本的每个方法都有一个特定的事物脚本,它侧重于业务上一系列流程上的顺序操作,它实现起来很简单,但是它有个致命的缺点就是它会造成很多重复的代码。

表模块模式比起事物脚本模式,具有一定的结构,它的思想也很简单,每个数据表都定义一个业务组件(实体类,实体操作类),在.NET中更多的使用DataSet作为表模型的数据交互。但是它也有一个缺点就是它是从数据库驱动它不适合于大量的数据表以及数据表之间的复杂关系。

活动记录模式中的对象中,可以包含数据和方法。它接近于数据表的结构,它的对象中执行方法中可以包含CRUD操作,验证算法,以及其他的计算功能。一般来说,领域模型不是太复杂,活动记录模式是个好选择。当然他也存在问题,同样地,它对于复杂的业务上,维护的成本也很高,并且如果需求变更导致数据库修改,就需要调整记录对象模型中的相关代码。

经典应用:LINQ-TO-SQL以及Castle ActiveRecord。

领域模型模式是从领域驱动设计中衍生来的,它是以业务为核心的设计模式。它对于复杂的业务逻辑,相当适用。前三种方式使用的是以数据驱动方式,数据驱动方式特点简单,但是当系统到了一定的规模后,就会到难以维护的程度。

image

 

数据访问层的目的很明确,主要作为提供数据持久化的功能,包括数据的读取和写入,另外还必须包括事务处理,并发控制等等。

操作数据库的方法可以有两种方式,ORM方式,ADO.NET方式。

ORM可以采用一些第三方的ORM框架来实现,ADO.NET采用ASP.NET自带的数据库操作来实现。

不同的数据库具有不同的持久化实现,因此这里添加一个存储仓库接口层,来适应不同的数据库实现,这里你可以使用IOC依赖注入方式进行数据库选型,可以利用Unity、Spring.NET、Castle的IOC容器等等。

image

 

最后各个层中都可以依赖于公共基础设施层

公共基础设施层可以包括Common通用模块,Logging日志模块,Exception异常模块,Configuration配置模块,DI依赖注入模块,单元测试模块以及第三方组件(例如NHibernate、Sprint.NET、Castle、Quartz计划任务等等)

最终图:

image

 

总结:项目类型、项目规模以及业务上的需求,都影响着系统架构的设计,系统架构并不是一层不变的,没有最好的架构,只有更好的架构,并且从项目中多思考系统的扩展性。文中对于架构的分析,只是从通常的角度上去考虑,在项目中,您还需要根据实际情况去做调整。

谢谢大家阅读!

作者:Leepy
 
邮箱:sunleepy(AT)gmail.com
 
    
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
你可以通过快速通道评论:
posted @ 2011-05-11 16:32 Leepy 阅读(13236) 评论(163) 编辑 收藏

评论共2页: 上一页 1 2 
 回复 引用 查看   
#64楼 2011-05-12 15:23 Smok.      
收益了.thanks.
 回复 引用 查看   
#65楼 2011-05-12 16:05 代维雅      
这个是一个理论的架构,实际软件架构,一般只用到每一层中的一部分。不可能全用,全用没有必要,而且会是软件结构变的复杂,运行效率也会变低
 回复 引用 查看   
#66楼 2011-05-12 19:32 立志      
总结的很全面,收益颇大!谢谢
 回复 引用 查看   
#67楼 2011-05-12 20:38 cacard      
“事物脚本”听起来怪怪的,应该是“事务脚本”吧,也可以称为“面向过程”。
 回复 引用 查看   
#68楼[楼主] 2011-05-12 20:40 Leepy      
@Mainz
挺好的,赞!

 回复 引用 查看   
#69楼[楼主] 2011-05-12 20:40 Leepy      
@代维雅
是的,文中也提到这个只是理想状态下的架构,实际上还要根据具体应用场景了。

 回复 引用 查看   
#70楼 2011-05-12 21:53 gtts      
非常感谢
 回复 引用 查看   
#71楼 2011-05-13 08:36 LanceZhang      
归纳的挺好,但称不上“企业级”
 回复 引用 查看   
#72楼 2011-05-13 09:35 mycrystal      
这个必须顶
 回复 引用 查看   
#73楼 2011-05-13 10:11 TJerry      
路过!
 回复 引用 查看   
#74楼 2011-05-13 11:43 顶立      
不错 学习中
 回复 引用 查看   
#75楼 2011-05-13 12:06 skycity      
写得非常好啊。
 回复 引用 查看   
#76楼 2011-05-13 16:12 姜敏      
还好,我们一直都是这种类似的架构,嗯,看来还是比较正规的做法
 回复 引用 查看   
#77楼 2011-05-13 20:06 如是如是      
层层递进,思路清晰,不错,推荐
 回复 引用 查看   
#78楼 2011-05-14 07:59 阿 & 文      
好!
 回复 引用 查看   
#79楼 2011-05-14 16:24 matchcolor      
很清晰
 回复 引用 查看   
#80楼 2011-05-14 20:43 骄傲的豹子      
@Mainz
请问你是用什么画图工具画的啊 好漂亮啊

 回复 引用 查看   
#81楼 2011-05-14 22:52 jackyong      
引用姜敏:还好,我们一直都是这种类似的架构,嗯,看来还是比较正规的做法

呵呵,不知道姜兄现在哪里高就呢!

 回复 引用 查看   
#82楼 2011-05-15 12:57 姜敏      
LZ:我目前在北京混日子,给您留言了,希望交个朋友,呵呵,向你学习学习。
 回复 引用 查看   
#83楼 2011-05-15 12:59 姜敏      
原来你的博客没有开通留言功能啊,贴下msn:jiangmin168168@hotmail.com
 回复 引用 查看   
#84楼 2011-05-15 15:02 软白      
不错, 层层解释很清楚
 回复 引用 查看   
#85楼 2011-05-20 11:16 梅川☆内酷      
不错,很清晰
顶!!!!!!!

 回复 引用 查看   
#86楼 2011-05-23 15:46 开文      
。。。看到这篇文章,是我们开发经理发邮件,建议我们多学学,我在业余的时间就进来看看,看到一点点就被吸引中了,我觉得你写的这个架构跟我们项目组当前开发的系统的架构非常像,很多都一摸一样,看到现在我对我们系统的架构以及对企业级的架构有了一个比较初步的理解,希望继续看下去会有更多的收获。。谢谢博主的分享
 回复 引用 查看   
#87楼[楼主] 2011-05-24 00:11 Leepy      
@开文
谢谢支持!能够给大家带来帮助就好!

 回复 引用 查看   
#88楼 2011-05-27 10:49 KKcat      
楼主在模式的造诣很深!!~
 回复 引用 查看   
#89楼 2011-05-27 10:58 Treenew Lyn      
同88楼评价。
 回复 引用 查看   
#90楼 2011-05-27 11:03 iTech      
总结的很好啊,像微软的那书?
 回复 引用 查看   
#91楼 2011-05-27 11:20 mikelij      
呵呵,今天一看,感觉怎么好像看过. 仔细一看日期,还真是,多天以前看过的。当时没有仔细看。先回个贴吧。现在仔细看一下。说实话,上次花的时间太短,只记得有些图。
 回复 引用 查看   
#92楼 2011-05-27 11:30 alexyang911      
真不错,向LZ学习
 回复 引用 查看   
#93楼 2011-05-27 12:25 CoderNet      
终于有个福建福州的文章被顶上去了。。。哈!
 回复 引用 查看   
#94楼 2011-05-27 13:27 john23.net      
学习了
 回复 引用 查看   
#95楼 2011-05-27 14:00 刘海礼      
分析的不错
 回复 引用   
#96楼 2011-05-27 15:01 没必要这样[未注册用户]
没必要这样,完全没有必要如此化分,如果你实践经历过这样的划分后,你会发现,它所表现的远远没有图上的清晰,而且过多的抽象原本就不值的推荐。人们到处推荐这种架构,在我看来,过多的分层无疑加重了程序的复杂度和可维护性。所以,简单最好。
 回复 引用 查看   
#97楼 2011-05-27 15:59 新志      
写的不错
 回复 引用 查看   
#98楼 2011-05-27 17:02 testzhangsan      
mark
 回复 引用 查看   
#99楼 2011-05-27 17:04 有容乃大      
希望博主开发一个sample供大家参考这样更好!
 回复 引用 查看   
#100楼 2011-05-27 17:05 东华一只球      
对于初学者来说理清思路的好文章,楼主挺辛苦的
 回复 引用 查看   
#101楼 2011-05-27 17:09 寂寞暴走      
像css文件,图片比较多,或者一些资源文件,还有文档比较多的话,需要加个什么层处理下好点,给个建议?
 回复 引用 查看   
#102楼 2011-05-27 18:51 简单有效:)      
总结的挺好的了,一个个阶段递进。跟之前张洋的分层一样,挺好的。
 回复 引用 查看   
#103楼[楼主] 2011-05-27 21:14 Leepy      
@寂寞暴走
我的建议是可以单独部署静态站点,去管理CSS,JS,图片等静态资源,当然这个和层没有关系。主要是和非静态资源程序端分开管理。当然目录的结构,必须按照一定的规则,至少你要把CSS,JS,图片,文档分门别类。

 回复 引用 查看   
#104楼[楼主] 2011-05-27 21:15 Leepy      
@没必要这样
有没有必要,还是看具体的项目需求。小的项目完全没有整套这么做。但是合理的架构,可以让大家做起来不会那么累。

 回复 引用 查看   
#105楼[楼主] 2011-05-27 21:15 Leepy      
@mikelij
欢迎交流:)

 回复 引用 查看   
#106楼[楼主] 2011-05-27 21:16 Leepy      
@Treenew Lyn
@KKcat
过奖~也在不断地学习和总结中!

 回复 引用 查看   
#107楼[楼主] 2011-05-27 21:17 Leepy      
@CoderNet
谢谢!

 回复 引用 查看   
#108楼 2011-05-27 22:48 大菜      
ding yixia
 回复 引用 查看   
#109楼 2011-05-28 00:20 边写边唱      
分析的很直观,思路清晰,观照自己开发过的一些系统架构,和作者分析的大同小异。
 回复 引用 查看   
#110楼 2011-05-28 12:04 cn_大斌哥      
楼主,《微软企业架构》一书和你讲的一样啊?
 回复 引用 查看   
#111楼 2011-05-28 12:28 On- The-Way      
楼主,mvc和asp.net(webform)是两种不同UI处理模式,文章中sp.net(webform)下面再画个mvc逻辑,不合理
 回复 引用 查看   
#112楼 2011-05-28 14:09 攀攀      
受益匪浅
 回复 引用 查看   
#113楼 2011-05-28 17:22 YogaLin      
感觉企业框架早就用起来了、现在很火?
 回复 引用 查看   
#114楼 2011-05-28 17:45 airwolf2026      
呃...mvp ...好像国内介绍的不是很多?
 回复 引用 查看   
#115楼 2011-05-28 18:18 testzhangsan      
总结得很不错,图也很不错!
 回复 引用 查看   
#116楼 2011-05-28 19:05 netfocus      
楼主厉害,我记得这个帖子已经被推荐了很多天了。
架构的大部分内容基本都涉及了,但每一部分的实现方式还是非常重要的,还是非常有讲究的,尤其是在面对很高的性能要求的时候,还要考虑很多其他的内容,较劲脑汁用各种方式优化性能,比如必须用到一些异步框架,如NSB,虽然他不一定适合每个公司。

 回复 引用 查看   
#117楼 2011-05-28 20:33 willian      
微软 DPE 团队已经提供了一个参考实现:Microsoft - Domain Oriented N-Layered .NET 4.0 App Sample (DDD Architecture),地址:http://microsoftnlayerapp.codeplex.com

不仅支持 on-premise 开发,也支持 cloud 开发,很好,很强大。

 回复 引用 查看   
#118楼[楼主] 2011-05-28 21:37 Leepy      
@On- The-Way
这里asp.net不是指特定的架构,它只是一个.net在Web上的实现。
WebForm要算上的话,它也属于是一个UI逻辑

 回复 引用 查看   
#119楼[楼主] 2011-05-28 21:38 Leepy      
@YogaLin
企业框架很多公司都会普及这类知识,但是在网上缺少了一些经验归纳。

 回复 引用 查看   
#120楼[楼主] 2011-05-28 21:38 Leepy      
@willian
多谢分享!

 回复 引用 查看   
#121楼[楼主] 2011-05-28 21:40 Leepy      
@netfocus
是的,具体场景具体分析,分析中不断优化框架。

 回复 引用 查看   
#122楼 2011-05-28 21:50 Jeffrey.Liang      
“数据访问层的目的很明确,主要作为提供数据持久化的功能,包括数据的读取和写入,另外还必须包括事务处理,并发控制等等。”对于这句话,我实在不敢苟同。
事务处理包括数据库事务和逻辑事务,只要是事务都应放在BLL,不应该放到DAL来处理。这是我的观点

 回复 引用 查看   
#123楼 2011-05-28 22:05 willian      
@Jeffrey.Liang
严重同意,除非事务放在存储过程中定义(纯数据库事务),否则(即使都是访问 DAL)都应放在 BLL 或 Domain 中实现,我和我的团队一直是这么做的。

换句话说,如果 DAL 中一定要封装事务(其实没必要,理由如楼主所言),我们都是放到存储过程实现的。

 回复 引用 查看   
#124楼 2011-05-28 22:05 mikelij      
@willian
谢谢分享。Enjoy!

 回复 引用 查看   
#125楼[楼主] 2011-05-28 22:18 Leepy      
@willian
@Jeffrey.Liang
我赞同你们的意见!数据访问层我所说的是指,通过事务的手段去提交一系列的操作,比如说我使用TransactionScope(手段)去提交批量处理多个表的指令(操作),这些指令已经通过BL层放入到一个容器或者队列中去了。数据访问要的只是实现数据的提交。

 回复 引用 查看   
#126楼 2011-05-28 22:49 mikelij      
读了比较久才读完。首先感谢分享!写的挺不错的。想提几点意见
1. 不够全面。
题目中既然是企业级系统架构,那么就有很多方面,如安全性,可扩展性,可伸缩性,性能,等等,作为一个架构设计师如何满足这些方面的需求。还有一个企业系统,除了软件的逻辑结构外,还有物理结构。我们需要考虑软件硬件的部署。
2. 系统的规模也是一个重要因素。规模小,可以不需要这么多层。比如服务层就不需要了。系统的规模很大程度上决定了系统的架构。我的此文http://www.cnblogs.com/mikelij/archive/2010/11/30/1892261.html 说的是大型系统,所以我画的图中都是很多昂贵硬件的。
3. DTO, Domain model是很大不同的。不会同时采用的。所以不存在DTOMapper.
4. 关于这句话"数据访问层的目的很明确,主要作为提供数据持久化的功能,包括数据的读取和写入,另外还必须包括事务处理,并发控制等等。"
上面也有Jeffrey.Liang朋友发现了。事务的创建,分离级别,提交,和回滚,都应该是由业务层来做的。事务处理,并发控制都是由业务层来做的。数据访问层只是参与到业务层发起的事务中。DAL不应该负责控制事务。

 回复 引用 查看   
#127楼 2011-05-28 23:18 mikelij      
引用Leepy:
@willian
@Jeffrey.Liang
我赞同你们的意见!数据访问层我所说的是指,通过事务的手段去提交一系列的操作,比如说我使用TransactionScope(手段)去提交批量处理多个表的指令(操作),这些指令已经通过BL层放入到一个容器或者队列中去了。数据访问要的只是实现数据的提交。

如上面我的评论,数据库访问层最好别去做提交数据库事务到数据库服务器。 TransactionScope实现的是让一系列数据库操作加入到一个当前事务中来。还没有到向数据库提交的阶段。向数据库服务器提交最好由业务层来完成。在说数据访问层的时候,最好别用"提交"这个词,用其他的词,如"加入",可能比较好点。

 回复 引用 查看   
#128楼[楼主] 2011-05-28 23:20 Leepy      
@mikelij
感谢你宝贵的意见!
针对第一点。本篇文章对其他方面没有做具体的叙述。这点和我的经验有关,自己也在不断摸索中,因此,自己不确定的东西不敢乱发表文章。的确,安全性,性能其他方面也是一个架构师需要去考虑的,不是单单你代码写得漂亮以及架构设计得很优美能够解决的问题。后面有机会会写这方面的文章。
针对第二点。是的。我也在评论中,反复的强调了,项目的规模也是决定架构的重要因素,而架构师的工作就是要决定架构的选型。
针对第三点。DTO我的观点是针对表现层,所展示出来的对象,可以是简单的一个对象,不需要太充血的模型(当然你也可以考虑延迟加载机制)。所以也并不是绝对的。
针对第四点。我赞同他的意见。从我对他的回复中,这里的“事务处理”更多的是已经是对于一个“事务结果”(如队列)进行数据上的提交。
另外,感谢你的文章分享,拜读下!

 回复 引用 查看   
#129楼 2011-05-29 01:50 xuefly      
其中业务层细分为:领域层和应用层
领域层还可以细分:领域模型、领域规约、领域服务和数据访问抽象等
业务层之上还可以有一个分布式服务层(楼主所指的服务层应该指就是分布式服务层)
可以称为服务的对象有很多:基础服务、领域服务、应用服务、Web Service等。
另外数据访问层的数据访问实现是属于基础结构层的,而数据访问抽象是属于领域层(业务层)的。
我觉得daxnet和微软西班牙团队界定的词汇、概念比较更合理、精细、明了。

 回复 引用 查看   
#130楼 2011-05-29 07:27 卡通一下      
我很想与楼主开个玩笑,那就是您如何理解“企业级系统”?也就是说它与“大系统”有什么区别?呵呵...

 回复 引用 查看   
#131楼 2011-05-29 09:16 willian      
@Leepy
不太赞同你说的 DTO 主要针对表现层,针对表现层的应该是 ViewModel,这个和 DTO 有不小区别。

举个例子:DTO 主要在 Domain/Service/BLL/DAL 这些层间流转,与相关对象的操作参数类型有直接关系,而 ViewModel 目的很单一,就是服务表现层的,很可能某个 ViewModel 来自某个 DTO 的部分信息(不是每个字段或属性都需要暴露给表现层),也可能组合来自多个 DTO 的多个部分信息之组合(如:同时显示主从数据,装载某个下拉框内所有数据),这时候就需要在 DTO、ViewModel 间进行映射操作。

当然了,还有种做法,可以将界面元素绑定到不同 DTOs,但这也增加了表现层与其它层的耦合度,我个人在实践过程中,很少这么做,也不推荐这么做(小项目或工期要求很紧的项目除外)。

以上仅为个人观点和经验总结,欢迎拍砖。

 回复 引用 查看   
#132楼 2011-05-29 09:25 willian      
@mikelij
DTO 和 Domain Model 是完全不同的概念,但就是应该同时采用(甚至必须同时采用),否则 Domain Model 中的对象如何与 UI/Service/BLL/DAL 这些层进行沟通呢?

我理解的 DTO Mapper,应该是将 DTO 映射到 ViewModel 供表现层使用的,如果采用 DDD 方法,这个映射应该在 Application Layer 完成(对应 MVC 就是 Contrller 层)。

如果将分层做得更彻底(个人并不建议这么做,因为实践中这样的场景并不多),每个层(不仅是 UI 和 Domain 间)的数据对象都可能存在映射关系。

说到底,还是要具体情况具体分析,怎么分层不重要,关键是用合适的分层对付合适的问题(或场景)。

 回复 引用 查看   
#133楼 2011-06-01 19:48 熊爸爸      
写的很好
 回复 引用 查看   
#134楼 2011-06-09 21:32 luafie      
写得很好,要是能配合一个DEMO那就完美了。
 回复 引用 查看   
#135楼 2011-06-13 18:31 昕友      
非常好!
 回复 引用 查看   
#136楼 2011-06-17 10:55 桀骜的灵魂      
引用willian:
@mikelij
DTO 和 Domain Model 是完全不同的概念,但就是应该同时采用(甚至必须同时采用),否则 Domain Model 中的对象如何与 UI/Service/BLL/DAL 这些层进行沟通呢?

我理解的 DTO Mapper,应该是将 DTO 映射到 ViewModel 供表现层使用的,如果采用 DDD 方法,这个映射应该在 Application Layer 完成(对应 MVC 就是 Contrller 层)。

如果将分层做得更彻底(个人并不建议这么做,因为实践中这样的场景并不多),每个层(不仅是 UI 和 Domain 间)的数据对象都可能存...


赞同你的看法,所以我对楼主的服务层理解有点疑惑,从DDD角度来看,博主的服务层究竟是Application Service还是Domina Service,如果是Domain Service何解有Service和DTO同层级之说?如果是Application Service何解又有应用服务接口层之见解?UI是变化最频繁的地方,根本无法限定死它,这样做就好像要给Controller套一个Facade行为,为模式而模式~

 回复 引用   
#137楼 2011-08-04 10:28 吉安信息港[未注册用户]
哈 随便不是很懂不过 感觉思路非常清晰
写的不错的 顶一个
 回复 引用 查看   
#139楼 2011-08-23 17:27 纪梵希      
你好,请问你那些图是用什么工具画的啊,挺好的, 我做程序经常吃在UI上的亏,可以介绍一下吗?我 邮箱 man23k@163.com
 回复 引用 查看   
#140楼 2011-08-25 01:22 JonathanYoung      
写的非常的易懂,读后发现应该把博主的思想传播到LAMP架构的设计上
这样的思想应该由一个框架来表现出来。

其实思想是没有分语言的,可以把思想实现出来,产生实际的价值是最重要的!

 回复 引用   
#141楼 2011-09-01 21:35 吉安信息港[未注册用户]
博主的论坛人气好旺啊
 回复 引用 查看   
#142楼[楼主] 2011-09-03 18:28 Leepy      
@JonathanYoung
语言也是无国界的~~

 回复 引用 查看   
#143楼[楼主] 2011-09-03 18:28 Leepy      
@纪梵希
用PPT画得

 回复 引用 查看   
#144楼[楼主] 2011-09-03 18:28 Leepy      
@吉安信息港
谢谢支持:)

 回复 引用 查看   
#145楼[楼主] 2011-09-03 18:29 Leepy      
@luafie
最近忙,没有空整理这个了哎~等有空就奉上

 回复 引用   
#146楼 2011-09-17 08:58 标签打印机[未注册用户]
期待博主有更多的好文章 支持博主
文章写的很好 嘿嘿
 回复 引用 查看   
#148楼 2011-10-15 14:32 JeffZuo      
術業有專攻,果然!@
期待博主後續的好文章!

 回复 引用   
#149楼 2011-10-20 17:01 老化箱[未注册用户]
博主的论坛人气好旺啊
 回复 引用   
#150楼 2011-10-24 16:56 鼓风烘箱[未注册用户]
很不错的文章啊
 回复 引用   
#151楼 2011-10-28 21:32 富士施乐[未注册用户]
好详细好专业啊 支持下
 回复 引用 查看   
#152楼 2011-10-31 13:18 easonblack      
写的真好,帮我理思路了
很专业的文章 支持下
 回复 引用   
#154楼 2011-11-06 10:52 真空烘箱[未注册用户]
博客实在是有点热闹啊 支持下
 回复 引用   
#155楼 2011-11-18 16:16 数据采集器[未注册用户]
挺不错的文章啊顶顶
 回复 引用   
#156楼 2011-11-21 20:43 蜂窝活性炭[未注册用户]
好久没更新了不过评论好多热闹啊
 回复 引用   
#157楼 2011-12-07 18:18 博彩通[未注册用户]
走过路过学习下嘿嘿
 回复 引用 查看   
#158楼 2011-12-19 16:17 JAVA土豆泥      
@Mainz
前辈您好,你这图是用什么软件画的,这么美观?

 回复 引用   
#159楼 2011-12-22 14:52 高压锅炉管[未注册用户]
这个架构感觉挺详细的啊
 回复 引用 查看   
#160楼 2012-01-14 22:53 ruinet      
@Mainz
问下这个图用什么画的?

 回复 引用   
#161楼 2012-02-08 08:53 era snapback[未注册用户]
系统架构怎么理解啊
 回复 引用   
#162楼 2012-02-19 20:41 XDPlays[未注册用户]
@谭亮
一個有趣的解釋為SQL Server和其他手段,使網絡系統,你幫助其他像我這樣的人來裝點

 回复 引用   
#163楼 2012-02-19 20:42 XDPlays[未注册用户]
一個有趣的解釋為SQL Server和其他手段,使網絡系統,你幫助其他像我這樣的人來裝點
评论共2页: 上一页 1 2 
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 2043127 GjhKYp6S3xg=