鍍金池/ 問答/Java  PHP  網(wǎng)絡安全  HTML/ 如何避免 Service層互相調用,避免 Service層調用其它的Dao層

如何避免 Service層互相調用,避免 Service層調用其它的Dao層

學習架構過程中出現(xiàn)了幾種問題:

  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里重新實現(xiàn)一遍,否則 Controller 沒法穿透 Facade 去使用 Service的方法。

除非 Facade 與 Service 平級,F(xiàn)acade 只是一種特殊的 Service, 且 Controller 最多只能同時調用它自己的 Facade 與 Service.

是這樣嘛?

回答
編輯回答
近義詞

Service調用其他ORM層怎么了,要不分層還有什么意義,直接去掉Service不行了

2017年6月14日 07:43
編輯回答
檸檬藍

一般springmvc架構設計調用規(guī)范
Controller調用Service層是:一對一接口調用,且Controller層不做任何業(yè)務處理,目的是為了后續(xù)拓展直接替換Controller為RPC框架而準備
Service層避免互相調用:一般情況下事物配置在service層,為了避免事物嵌套或單個事物過大等問題的
service層調用dao層:除了盡量控制事物大小,即控制Service調用dao層的復雜度,將單個事物經(jīng)量控制在100ms之內

2017年12月25日 10:44
編輯回答
涼心人

按照分層設計思想。這樣是不合理的。但是現(xiàn)在都是講的面向服務編程(SOA)。你的服務調用其他的服務不可避免。你可以使用rpc框架如dubbo來遠程調用其他service。來降低耦合度。

clipboard.png
系統(tǒng)架構也是這樣演進的

2018年2月21日 09:33