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

发布于 2022-09-07 11:37:21 字数 673 浏览 13 评论 0

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

  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.

是这样嘛?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

靖瑶 2022-09-14 11:37:21

按照分层设计思想。这样是不合理的。但是现在都是讲的面向服务编程(SOA)。你的服务调用其他的服务不可避免。你可以使用rpc框架如dubbo来远程调用其他service。来降低耦合度。

clipboard.png
系统架构也是这样演进的

冷清清 2022-09-14 11:37:21

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

温柔戏命师 2022-09-14 11:37:21

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文