这是我近几年看过的对三层架构设计最有价值的文章。
与大家分享,希望大家从中得到系统性的启发。
—华哥。第一篇: 三层架构模型实战。
一.三层架构图。
二.系统各层次职责。
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系统为例。
1.如果eas系统提供了webservice(remoting)服务,则eas必须提供封装了与eas服务交换信息的通信机制,客户系统只要通过就可以非常简便地访问eas提供的服务。
2.如果eas需要通过webservice(remoting)**客户系统,则必须提供仅仅定义了接口的客户系统将引用该dll,实现其中的接口,并将其发布为服务,供eas**。
3.当webservice的参数或返回值需要是复杂类型,则该复杂类型应该在对应的或中定义,webservice定义的方法中的复杂类型应该使用xml字符串代替,而xml字符串和复杂类型对象之间的转换应当在或中实现。
第二篇:深入理解的三层架构模型。
一.三层架构图。
二.系统各层次职责。
interface)层的职责是数据的展现和采集,数据采集的结果通常以entity object提交给bl层处理。service interface侧层用于将业务或数据资源发布为服务(如webservices)。
logic)层的职责是按预定的业务逻辑处理ui层提交的请求。
1)business function 子层负责基本业务功能的实现。
2)business flow 子层负责将business function子层提供的多个基本业务功能组织成一个完整的业务流。(transaction只能在business flow 子层开启。)
3.resourceaccess层的职责是提供全面的资源访问功能支持,并向上层屏蔽资源的**。
1)bem(business entity manager)子层采用dataaccess子层和serviceaccess子层来提供业务需要的基础数据/资源访问能力。
2)dataaccess子层负责从数据库中存取资源,并向bem子层屏蔽所有的sql语句以及数据库类型差异。
db adapter子层负责屏蔽数据库类型的差异。
orm子层负责提供对象-关系映射的功能。
relation子层提供orm无法完成的基于关系(relation)的数据访问功能。
3)serviceaccess子层用于以soa的方式从外部系统获取资源。
注:service entrance用于简化对service的访问,它相当于service的**,客户直接使用service entrance就可以访问系统发布的服务。service entrance为特定的平台(如j**a、.
net)提供强类型的接口,内部可能隐藏了复杂的参数类型转换。
4)configaccess子层用于从配置文件中获取配置object或将配置object保存倒配置文件。
4.entity侧层跨越ui/bem/resourcemanager层,在这些层之间传递数据。entity侧层中包含三类entity,如下图所示:
三.aspect
aspect贯穿于系统各层,是系统的横切关注点。通常采用aop技术来对横切关注点进行建模和实现。
1.securtiy aspect:用于对整个系统的security提供支持。
2.errorhandling aspect:整个系统采用一致的错误/异常处理方式。
3.log aspect:用于系统异常、日志记录、业务操作记录等。
四.规则。1.系统各层次及层内部子层次之间都不得跨层调用。
2.entity object 在各个层之间传递数据。
3.需要在ui层绑定到列表的数据采用基于关系的dataset传递,除此之外,应该使用entity object传递数据。
4.对于每一个数据库表(table)都有一个db entity class与之对应,针对每一个entity class都会有一个bem class与之对应。
5.有些跨数据库或跨表的操作(如复杂的联合查询)也需要由相应的bem class来提供支持。
6.对于相对简单的系统,可以考虑将business function子层和business flow 子层合并为一个。
7.ui层和bl层禁止出现任何sql语句。
五.错误与异常。
异常可以分为系统异常(如网络突然断开)和业务异常(如用户的输入值超出最大范围),业务异常必须被转化为业务执行的结果。
1.dataaccess层不得向上层隐藏任何异常(该层抛出的异常几乎都是系统异常)。
2.要明确区分业务执行的结果和系统异常。比如验证用户的合法性,如果对应的用户id不存在,不应该抛出异常,而是返回(或通过out参数)一个表示验证结果的枚举值,这属于业务执行的结果。但是,如果在从数据库中提取用户信息时,数据库连接突然断开,则应该抛出系统异常。
3.在有些情况下,bl层应根据业务的需要捕获某些系统异常,并将其转化为业务执行的结果。比如,某个业务要求试探指定的数据库是否可连接,这时bl就需要将数据库连接失败的系统异常转换为业务执行的结果。
4.ui层(包括service层)除了从调用bl层的api获取的返回值来查看业务的执行结果外,还需要截获所有的系统异常,并将其解释为友好的错误信息呈现给用户。
六.项目组织目结构。
以bas系统为例。
1.主目录结构:
2.命名空间命名:每个dll的根命名空间即是该dll的名字,如的根命名空间就是每个根命名空间下面可以根据需求的分类而增加子命名空间,比如,的子空间与分别处理不同的业务逻辑。
3.包含众多子项目的庞大项目的物理组织:
核心子项目core的位置:
core子项目中包含一些公共的基础设施,如错误处理、权限控制方面等。
七.发布服务与服务**。
以eas系统为例。
1.同ui层的page一样,服务也不允许抛出任何异常,而是应该以返回错误码(int型,1表示成功,其它值表示失败)的形式来表明服务调用出现了错误,如果方法有返回值,则返回值以out参数提供。
2.如果bas系统提供了webservice(remoting)服务,则bas必须提供封装了与bas服务交换信息的通信机制,客户系统只要通过就可以非常简便地访问bas提供的服务。
3.如果bas需要通过webservice(remoting)**客户系统,则必须提供仅仅定义了接口的客户系统将引用该dll,实现其中的接口,并将其发布为服务,供bas**。
4.当webservice的参数或返回值需要是复杂类型――即架构图中的service entity,则service entity应该在对应的或中定义。webservice定义的方法中的复杂类型应该使用xml字符串代替(注意,entrance和callback接口对应服务的方法的参数是强类型的),而xml字符串和复杂类型对象之间的转换应当在或中实现。
内街商铺三层产品营销推广方案
xxx项目 二 三层商铺营销推广方案。一 产品定位。1 产品属性定位 金廊铺 根据业态规划和业态布局,主力品牌 商家以及具有人气带动性的商家。均设在。二 三层,凭借a区产品设计。二 三层均设有3米宽的连廊的优。势,将加推产品定位为 金廊铺 优势 连廊可贯穿二三层每间店铺,宽至3米加上二三层均属人气带...
企业级应用的硬件平台架构
罗雪雁。中航工业东安集团信息档案中心,黑龙江哈尔滨 摘。要 对于企业级应用系统,既要考虑应用系统服务的不间断性,还要考虑数据存储的高可靠性以及数据存取的稳定性,出于对两者兼顾的考虑,提出了企业级应用系统建设的硬件实施方案,并具体论述了该方案实现过程的设备工作模式。关键词 双机热备 引言。目前,对于企...
2023年国有企业三严三实党课讲稿
中国共产党。党课讲稿。国有企业 三严三实 党课讲稿。同志们 党的十八大以来,总书记多次强调,党员干部特别是各级领导干部要严以修身 严以用权 严以律己,谋事要实 创业要实 做人要实。决定,从今年4月开始在全国处级以上干部 国有企业中层以上管理人员中进行 三严三实 专题教育。上级公司6月18日下发了 x...