分层架构

创建时间:
2014-06-07 15:38
最近更新:
2018-10-19 09:56

Glossary

  • Layer / Tier
  • IDAL, DAL Interface, 是数据访问接口层。
  • DAL Factory, 工厂。
  • DAL, Data Access Layer, 数据访问层。
  • BLL, Business Logic Layer, 业务逻辑层。
  • PL, Presentation Layer: 表现层,负责与客户端进行交互。
  • Model, 贫血的实体类。
  • Business Entities
  • Application Layer: 负责协调领域层之间的交互。
  • Domain Layer: 领域层。软件的核心,所有相关的 Domain information 都在这,可以看成是 Business Logic Layer,但不完全是。
  • Service Layer, 服务层,它通常需要访问 repository 层,但是它不关心数据是如何获取和存储的。
  • repository, 管理数据持久层,它负责数据的 CRUD。
  • Infrastructure Layer: 負責各層之間的交互溝通、資料存取、安全性管理及通用 vLibrary。

Resource

  1. NET 项目分层与文件夹结构大全 - 传说中的弦哥
  2. 何戈洲 - 系统架构师
  3. 何戈洲 - 系统架构师 - 基础到企业应用架构 - 系列索引
  4. 何戈洲 - 系统架构师 - 基础到企业应用架构 - 分层
  5. 何戈洲 - 系统架构师 - 基础到企业应用架构 - 业务逻辑层
  6. 何戈洲 - 系统架构师 - 基础到企业应用架构 - 服务层
  7. 你真的了解分层架构吗 - 写给被 PetShop "毒害" 的朋友们 - T2 噬菌体
  8. 开发架构的演化
  9. 从 Microsoft.AspNet.Identity 看微软推荐的一种 MVC 的分层架构
  10. 分层架构设计原则
  11. ASP.NET MVC 项目框架快速搭建实战
  12. MVC4 商城项目一: 框架设计
  13. .NET 应用架构设计 - 重新认识分层架构 (现代企业级应用分层架构核心设计要素)
  14. Service 层在 J2EE 分层结构中的作用
  15. OSharp 框架解说系列 - 总体设计及系列导航
  16. OSharp 框架解说系列 (4): 架构分层及 IoC
  17. 业务层、服务层、数据层、表现层
  18. 分层架构中的服务层 - 服务层实战
  19. Entity Framework 形成之旅 - by 伍华聪
  20. 项目架构开发: 展现层

数据访问层 - 网友观点 Tony Praise

数据访问层:
1 该层不应该有事务,应该只是很纯的 CRUD、IsExist 等等比较通用的数据访问方法。
2 业务需求的变化不应该造成该层方法的修改 (除非是增加字段等等和表有关联的需求),判断是否合格的数据访问层可以使用这条规则。
3 该层中的方法对于业务层来说是一个个很纯的小零件 (或者说积木吧),例如: 一个添加用户的方法中,就只是添加用户,不会再向日志表插入操作日志。这样做的好处是方法职责清晰,稳定 (能适应需求变化,一经代码生成后,很少再做修改,就叫做稳定)。
4 该层的方法中并不是说就完全没有事务参与,经常是要先判断当前线程上下文是否有事务存在,有事务存在就按事务执行,没有事务就自己创建连接对象。
-- 三层架构新观点

服务层的作用

在上面介绍的三层架构模式中,存在一个缺陷,如果我们构建的软件或系统支持分布式或者需要对外提供服务的时候,这个场景就无法满足了,所以这个时候服务层就出现了,就是在 BLL 层的基础上进行包装,包装成可以对外提供调用的分布式服务。
1、将业务逻辑层进行封装,对外提供业务服务调用。
2、通过外观模式,屏蔽业务逻辑内部方法。
3、降低业务逻辑层与 UI 层的依赖,业务逻辑接口或实现的变化不会影像 UI 层。
4、降低 UI 层调用的请求次数及数据往返。
加入了 DTO 层后,前端的 UI 层,只是知道 DTO 的存在,同时前端需要的数据都在一个 DTO 中,这样,每次调用服务层的时候,只需要调用一次就可以完成所有的业务逻辑操作,而不是原来的直接调用业务逻辑层那样的,需要调用多次,对于分布式场景下,减少服务调用的次数,尤其重要。
-- 何戈洲 - 系统架构师 - 基础到企业应用架构 - 分层

服务层实际上并不执行任何具体的工作,其功能在于组织各个业务对象,服务层将业务层所有的细节对表现层都隐藏起来,服务器将组织业务逻辑层中的组件,并且通过数据迁移对象 (DTO) 与表现层交互,因此就产生一个 DTO 模型。为了实现服务的可重用性,需要使用服务接口,表现层通过规定的接口访问功能。服务的实现继承服务接口,而服务的实现专注于业务层的调用。
-- 开发架构的演化

DTO (数据传输对象层)

该层负责屏蔽后端的实体层,将 UI 层需要的数据进行重新的定义和封装,在实际的业务场景下,后端实现或存储的数据远比用户需要的数据要庞大和负责,所以前端需要的数据相对来说要么是组合的,要么是抽取的,不是完整的,因为我们在设计数据存储格式上都会有一些额外的设计和考虑。
-- 何戈洲 - 系统架构师 - 基础到企业应用架构 - 分层

Java 分层架构

Java 三层架构

  • 数据访问层 (dao)
  • 业务逻辑层 (biz 或者 services)
  • 界面层 (ui)

Modle 层:实体模型类,与数据库中的表严格地一一对应,用于在各层之间传递数据。
Dao 层:数据访问层。集中与数据库交互的代码。例如:使用 Hibernate 连接数据库、操作数据库 (增删改查)。
Service 层:集中与业务逻辑相关的代码。例如:在注册一个用户的时候需要往日志表里 INSERT 日志,那么就在 service 层构造事务,在该事务中调用 Dao 层的 User.Insert () 与 Log.Insert ()。
Action 层:引用对应的 Service 层。它是业务层的一部分,主要工作 "取调转":获取 UI 数据 + 调用 biz 方法 + 转发到下一个 action 或者页面。

以上的 Hibernate,Struts,都需要注入到 Spring 的配置文件中,Spring 把这些联系起来,成为一个整体。

层间调用规则

action 调 serveice
service 调 dao
dao 要用到 maps 中的语句
util 中存放基本模板以便调用
在 spring 中,service 是 action 和 dao 的中间层,action 调用 service,service 调用 dao。

文件夹规则

action 中存放某个功能的整体的实现方法
service 中存放服务实现的详细方法
dao 中存放与数据库直接接触的类
maps 中存放查询时使用的 sql

与 Windows 平台对照

DAL/DAO: 与数据库中的表严格地一一对应。
BLL/Service: 与数据库中的表并不一一对应。