学习架构过程中出现了几种问题:
- 部分 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.
是这样嘛?
按照分层设计思想。这样是不合理的。但是现在都是讲的面向服务编程(SOA)。你的服务调用其他的服务不可避免。你可以使用rpc框架如dubbo来远程调用其他service。来降低耦合度。
系统架构也是这样演进的