如何避免 Service层互相调用,避免 Service层调用其它的Dao层

学习架构过程中出现了几种问题:

  1. 部分 Service层 会调用 其它的Dao层, 比如 UserService 会调用 UserPositionDao
    UserBookDao
  2. 部分 Service层 会调用 其它的Service层, 比如 UserService 会调用 UserAppleService
    UserPencilService
  3. 部门 Controller层 会调用 多个Service层

按照分层设计思想来说,这样的设计是不合理的,有大神说要使用 Facade分层来避免,于是我改成了

  1. 一个 Service 只调用 一个 Dao, 且不能互相调 Service
  2. 一个 Facade 可以调用不同的 Service
  3. 一个 Controller 只能调用 一个 Facade,且不能调 Service

这样问题来了, 我在UserService里写的所有方法,是不是都要在 UserFacade里重新实现一遍,否则 Controller 没法穿透 Facade 去使用 Service的方法。

除非 Facade 与 Service 平级,Facade 只是一种特殊的 Service, 且 Controller 最多只能同时调用它自己的 Facade 与 Service.

是这样嘛?

噜噜哒
浏览 3356回答 3
3回答

莫回无

Service调用其他ORM层怎么了,要不分层还有什么意义,直接去掉Service不行了

凤凰求蛊

一般springmvc架构设计调用规范Controller调用Service层是:一对一接口调用,且Controller层不做任何业务处理,目的是为了后续拓展直接替换Controller为RPC框架而准备Service层避免互相调用:一般情况下事物配置在service层,为了避免事物嵌套或单个事物过大等问题的service层调用dao层:除了尽量控制事物大小,即控制Service调用dao层的复杂度,将单个事物经量控制在100ms之内
打开App,查看更多内容
随时随地看视频慕课网APP