我的架构经验小结(二)-- 关于三层架构

   我的架构经验小结(一)-- 常用的架构模型 一文中简单介绍了我常采用的几种架构模型,本文将稍微深入地介绍其中的一种 -- 三层架构模型。

一.三层架构图
 
二.系统各层次职责
1.UI(User Interface)层的职责是数据的展现和采集,数据采集的结果通常以Entity object提交给BL层处理。与UI平行的Service Interface层用于将业务发布为服务(如WebServices)。

2.BL(Business Logic)层的职责是按预定的业务逻辑处理UI层提交的请求。
(1)Business class 子层负责基本业务功能的实现。
(2)Business Flow 子层负责将Business class子层提供的多个基本业务功能组织成一个完整的业务流。(Transaction通常在Business Flow 子层开启。)

3.DataAccess层的职责是提供全面的数据访问功能支持,并向上层屏蔽所有的SQL语句以及数据库类型差异。
(1)DB Adapter子层负责屏蔽数据库类型的差异。
(2)ORM子层负责提供对象-关系映射的功能。
(3)Relation子层提供ORM无法完成的基于关系(Relation)的数据访问功能。
(4)BEM(Business Entity Manager)子层采用ORM子层和Relation子层来提供业务需要的基础数据访问能力。

三.Aspect
 Aspect贯穿于系统各层,是系统的横切关注点。通常采用AOP技术来对横切关注点进行建模和实现。
1.Securtiy Aspect:用于对整个系统的Security提供支持。
2.ErrorHandling Aspect:整个系统采用一致的错误/异常处理方式。
3.Log Aspect:用于系统异常、日志记录、业务操作记录等。

四.规则
1.系统各层次及层内部子层次之间都不得跨层调用。
2.Entity object 在各个层之间传递数据。
3.需要在UI层绑定到列表的数据采用基于关系的DataSet传递,除此之外,应该使用Entity object传递数据。
4.对于每一个数据库表(Table)都有一个Entity class与之对应,针对每一个Entity class都会有一个BEM Class与之对应。
5.在数量上,BEM Class比Entity class要多,这是因为有些跨数据库或跨表的操作(如复杂的联合查询)也需要由相应的BEM Class来提供支持。
6.对于相对简单的系统,可以考虑将Business class 子层和Business Flow 子层合并为一个。
7.UI层和BL层禁止出现任何SQL语句。

五.错误与异常
        异常可以分为系统异常(如网络突然断开)和业务异常(如用户的输入值超出最大范围),业务异常必须被转化为业务执行的结果。
1.DataAccess层不得向上层隐藏任何异常(该层抛出的异常几乎都是系统异常)。
2.要明确区分业务执行的结果和系统异常。比如验证用户的合法性,如果对应的用户ID不存在,不应该抛出异常,而是返回(或通过out参数)一个表示验证结果的枚举值,这属于业务执行的结果。但是,如果在从数据库中提取用户信息时,数据库连接突然断开,则应该抛出系统异常。
3.在有些情况下,BL层应根据业务的需要捕获某些系统异常,并将其转化为业务执行的结果。比如,某个业务要求试探指定的数据库是否可连接,这时BL就需要将数据库连接失败的系统异常转换为业务执行的结果。
4.UI层除了从调用BL层的API获取的返回值来查看业务的执行结果外,还需要截获所有的系统异常,并将其解释为友好的错误信息呈现给用户。

 六.项目目录结构
1.目录结构:以EAS系统为例。

2.命名空间命名:每个dll的根命名空间即是该dll的名字,如EAS.BL.dll的根命名空间就是EAS.BL。每个根命名空间下面可以根据需求的分类而增加子命名空间,比如,EAS.BL的子空间EAS.BL.Order与EAS.BL.Permission分别处理不同的业务逻辑。

七.发布服务与服务回调
   以EAS系统为例。
1.如果EAS系统提供了WebService(Remoting)服务,则EAS必须提供EAS.Entrance.dll。EAS.Entrance.dll封装了与EAS服务交换信息的通信机制,客户系统只要通过EAS.Entrance.dll就可以非常简便地访问EAS提供的服务。
2.如果EAS需要通过WebService(Remoting)回调客户系统,则必须提供仅仅定义了接口的EAS.CallBack.dll,客户系统将引用该dll,实现其中的接口,并将其发布为服务,供EAS回调。
3.当WebService的参数或返回值需要是复杂类型,则该复杂类型应该在对应的EAS.Entrance.dll或EAS.CallBack.dll中定义,WebService定义的方法中的复杂类型应该使用Xml字符串代替,而Xml字符串和复杂类型对象之间的转换应当在EAS.Entrance.dll或EAS.CallBack.dll中实现。

时间: 2024-10-17 09:43:41

我的架构经验小结(二)-- 关于三层架构的相关文章

我的架构经验小结(一)-- 常用的架构模型

      经过这几年的积累,在系统架构方面逐渐积累了一些自己的经验,到今天有必要对这些经验作个小结.在我的架构思维中,主要可以归类为三种架构模型:3/N层架构."框架+插件"架构.地域分布式架构. 一.三种架构模型 1.3/N层架构        这是经典的多层架构模型,对于稍微复杂一点或特别复杂的系统,不使用分层架构是很难想象的.下图是经典的3层架构:     如今,凡是个程序员都能侃侃而谈3/N层架构,这确实是解决系统复杂性的一种主流模式,但是,只要采用了3/N层架构是不是就一定

我的架构经验小结(五)-- 日志记录

      以前写的关于架构经验方面的文章(如上一篇实战中演化的三层架构)都是从整体的角度出发的,采用全局的视角,本文我们将拉近镜头,聚焦于日志记录这一块.随着做软件的时间越长.经验积累得越来越多,就越觉得日志记录的重要.       日志记录的主要作用可以从正反两个方面来说: (1)如果程序运行出现问题,可以通过相关日志快速定位到出问题的地方,找到问题的根源,从而快速解决问题.对于已上线的系统来说,如果出现一个bug,通常,解决这个bug的时间主要花在定位bug上,一旦找到bug根源,修复它是

ASP.NET三层架构详解 如何实现三层架构_实用技巧

一.数据库 /*==============================================================*/ /* DBMS name: Microsoft SQL Server 2000 */ /*==============================================================*/ if exists (select 1 from sysobjects where id = object_id('newsConte

web部署-VS2010三层架构不可用

问题描述 VS2010三层架构不可用 VS2010网站项目中,三层架构的相关代码显示不可用,网站部署却成功啦,是什么原因 解决方案 vs断点不可用 解决方案二: 三层架构的相关代码显示不可用是什么意思

ASP.NET 三层架构使用IDAL 接口层有什么作用,有和妙用,使用业务逻辑层BLL直接调用数据层DAL不可以嘛。

问题描述 我们通常是UIweb层调用BLL层,BLL层调用DAL达到数据的交换.但是看到大多数项目是有个IDAL接口,只是声明方法没有任何的代码实现部分,代码实现部分都放在了DAL层,然后BLL层去调用IDAL接口层的方法实现,并没有去调用DAL层,UI层调用BLL层,这里的接口层有和作用,请教各位帮忙解答,不胜感激! 解决方案 解决方案二:IDAL是DAL层的类要实现的接口.DAL层的各类需要完成对数据库的访问,但是不同的数据库需要使用不同的DAL对象,这样对于BLL层来说无法实现数据库无关性

三层架构怎么做?

问题描述 想学做网站,但是知识很零碎,不知道如何做起?听说可以用三层架构来做,网上有很多的三层架构的软件,但是有分语言的.做三层架构的时候,是针对使用的语言有不用么?是用软件来做还是要自己用语言来做呢? 解决方案 解决方案二:三层架构(3-tierapplication)通常意义上的三层架构就是将整个业务应用划分为:表现层(UI).业务逻辑层(BLL).数据访问层(DAL).区分层次的目的即为了"高内聚,低耦合"的思想. 1.表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个

三层架构(一)——什么是三层架构?

 一.什么是三层架构?   1.概念   三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI).业务逻辑层(BLL).数据访问层(DAL).区分层次的目的即为了"高内聚,低耦合"的思想.    分层(tier) 概念 表现层(UI) 通俗讲就是展现给用户的界面,用于显示数据和接受用户输入的数据:即用户在使用一个系统的时候他的所见所得. 业务逻辑层(BLL) 针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理.是表

企业级应用框架:三层架构之解耦

前言 前段时间朋友拿了个网站给我,让我帮忙添加几个小功能,我爽快的答应了,但是当我打开源码,我瞬间就奔溃了,整个项目连最基本的三层框架也没有搭建,仅仅是封装了一个sqlhelp作为数据库的操作接口,项目中的SQL查询语句无处不在,业务逻辑紧紧耦合在UI逻辑中,看到这样的代码,坦白来说,我什么兴致都没有了,但是碍着人情,我硬着头皮,把基本功能的完成交差,通过这件事情,我对软件分层进行了深入的思考. 三层架构 说到三层架构,大伙都很熟悉,我也不再多啰嗦了,我们直接快速搭建一个. 项目的引用关系是:S

三层架构(二)——为什么要用三层架构?

  二.为什么要用三层架构?      1.分析       层次结构在现实社会中随处可见.记得有个笑话讲有个村长得意的向他的老婆吹牛:"全中国比我官大的只有四个人,乡长.县长.省长和国务院总理",这个笑话体现了真实社会的分层现象,社会人群会分层,公司管理人员结构也会分层, 楼房是分层的,甚至做包子的笼屉也是分层的,虽然分层的目的各有不同,但都是为了解决某一问题而产生的,所以分层架构是为了解决某一问题而产生的解决方案.         社会分工的优势:让适合的人做自己最擅长的事情,缩短