在阿里巴巴 Java 开发手册里,建议的架构如下图:
- 开放接口层:可直接封装 Service 方法暴露成 RPC 接口;通过 Web 封装成 http 接口;进行网关安全控制、流量控制等。
- 终端显示层:各个端的模板渲染并执行显示的层。当前主要是 velocity 渲染,JS 渲染,JSP 渲染,移动端展示等。
- Web 层:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。
- Service 层:相对具体的业务逻辑服务层。
- Manager 层:通用业务处理层,它有如下特征:
<br>1 ) 对第三方平台封装的层,预处理返回结果及转化异常信息;
<br>2 ) 对 Service 层通用能力的下沉,如缓存方案、中间件通用处理;
<br>3 ) 与 DAO 层交互,对多个 DAO 的组合复用。
- DAO 层:数据访问层,与底层 MySQL、Oracle、Hbase 等进行数据交互。
- 外部接口或第三方平台:包括其它部门 RPC 开放接口,基础平台,其它公司的 HTTP 接口。
应当如何理解Manager
层呢,特别是上文提到的第三点与 DAO 层交互,对多个 DAO 的组合复用
?
例如用户进行购物操作, 分别记录一条订单记录和操作记录,按照手册应该如此实现:
public class OrderService{
@Autowired
private OrderDao orderDao;
@Autowired
private OrderManager orderManager;
.. save(Order order){
orderManager.save(order);
}
.. detail(long orderId){
return orderDao.get(orderId)
}
}
public class OrderManager{
@Autowired
private OrderDao orderDao;
@Autowired
private LogDao logDao;
.. save(Order order){
orderDao.save(order);
logDao.save(order.getLog())
}
}
1
pythonee 2019-02-28 20:16:14 +08:00
我理解是用于管理接口的,比如运维管理、可用性管理等
|
2
halk OP 还有第二点又应该如何理解:`对 Service 层通用能力的下沉,如缓存方案、中间件通用处理`
|
3
secondwtq 2019-02-28 21:03:24 +08:00
讲个笑话:
Of course we need managers in companies, otherwise where does all the profit go? |
4
huijiewei 2019-02-28 21:22:18 +08:00
进化后应该是 AOP
|
5
loryyang 2019-02-28 21:43:57 +08:00
我觉得这样理解:另外一个项目也需要使用到的一些通用的功能,不是本项目提供的服务,但是别的项目也能用的功能。是从 service 层往下沉淀的(从 service 层抽取出来的)
个人认为,对于小项目,完全没必要建立 manager 层,一层 service 足够了 |
6
huangdayu 2019-02-28 23:30:49 +08:00 via Android 2
我的理解是:manager 是公用的 service
|
7
Foxkeh 2019-03-01 00:47:28 +08:00 via Android
小弟认觉得此设计利于微服务架构,接口调用层次更清晰。具体看业务复杂程度和项目规模吧跟,小项目的话应该都不会细分 service 跟 manager
|
8
qiyuey 2019-03-01 01:44:13 +08:00 1
Manger 功能比较单一,如实体的增删改查,Service 是多个 Manger 的组合,实现一块相对独立的业务逻辑
|
10
specita 2019-03-01 10:09:25 +08:00
简单的 crud 不需要 manager 层的,如文档所说,比如我们项目有个 rpc 层,其实就是 manager 这个概念
|
12
cyspy 2019-03-01 10:46:25 +08:00
如果位于 Service 和 DAO 之间的话,处理的应该是类似热点缓存、外键约束这一类所有 service 通用的内容吧
|
13
kanepan19 2019-03-01 14:10:50 +08:00
事务在 manager 层,抛出异常。
Service 往往捕获异常,return 通过 Result 返回,比如 Result<Order> |
14
southsala 2019-03-01 16:29:18 +08:00
举个栗子,如果你开发一个去掉 Manager 层和外部接口或第三方平台的教育 APP 后台,这个分层应该很容易理解。
后续你加个天气功能,加了 Manager 和外部接口部分,天气接口限制访问次数,所以在 Manager 层加了缓存;还有教育后台的某些数据的缓存( 2 ) 之后要变现,买了个电商系统,于是 Manager 层对数据整理一下,比如异常提醒之类和本系统格式相左的,返回给上一级( 1 ) ( 3 )的话大概是需要组合的通用数据,降低负责度 |
15
halk OP 更新了一个例子,请大家补充
谢谢 |
16
HansCathy 2019-03-06 11:21:46 +08:00
Manager 层 我理解是操作缓存 + 调用 DAO, 是一个综合的数据操作层
|