在阿里巴巴 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())
}
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.