如何避免 Service层互相调用,避免 Service层调用其它的Dao层
学习架构过程中出现了几种问题:
- 部分 Service层 会调用 其它的Dao层, 比如 UserService 会调用 UserPositionDao
UserBookDao - 部分 Service层 会调用 其它的Service层, 比如 UserService 会调用 UserAppleService
UserPencilService - 部门 Controller层 会调用 多个Service层
按照分层设计思想来说,这样的设计是不合理的,有大神说要使用 Facade分层来避免,于是我改成了
- 一个 Service 只调用 一个 Dao, 且不能互相调 Service
- 一个 Facade 可以调用不同的 Service
- 一个 Controller 只能调用 一个 Facade,且不能调 Service
这样问题来了, 我在UserService里写的所有方法,是不是都要在 UserFacade里重新实现一遍,否则 Controller 没法穿透 Facade 去使用 Service的方法。
除非 Facade 与 Service 平级,Facade 只是一种特殊的 Service, 且 Controller 最多只能同时调用它自己的 Facade 与 Service.
是这样嘛?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
按照分层设计思想。这样是不合理的。但是现在都是讲的面向服务编程(SOA)。你的服务调用其他的服务不可避免。你可以使用rpc框架如dubbo来远程调用其他service。来降低耦合度。
系统架构也是这样演进的
Service调用其他ORM层怎么了,要不分层还有什么意义,直接去掉Service不行了
一般springmvc架构设计调用规范
Controller调用Service层是:一对一接口调用,且Controller层不做任何业务处理,目的是为了后续拓展直接替换Controller为RPC框架而准备
Service层避免互相调用:一般情况下事物配置在service层,为了避免事物嵌套或单个事物过大等问题的
service层调用dao层:除了尽量控制事物大小,即控制Service调用dao层的复杂度,将单个事物经量控制在100ms之内