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

如何避免 Service層互相調(diào)用,避免 Service層調(diào)用其它的Dao層

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

  1. 部分 Service層 會調(diào)用 其它的Dao層, 比如 UserService 會調(diào)用 UserPositionDao
    UserBookDao
  2. 部分 Service層 會調(diào)用 其它的Service層, 比如 UserService 會調(diào)用 UserAppleService
    UserPencilService
  3. 部門 Controller層 會調(diào)用 多個Service層

按照分層設(shè)計思想來說,這樣的設(shè)計是不合理的,有大神說要使用 Facade分層來避免,于是我改成了

  1. 一個 Service 只調(diào)用 一個 Dao, 且不能互相調(diào) Service
  2. 一個 Facade 可以調(diào)用不同的 Service
  3. 一個 Controller 只能調(diào)用 一個 Facade,且不能調(diào) Service

這樣問題來了, 我在UserService里寫的所有方法,是不是都要在 UserFacade里重新實現(xiàn)一遍,否則 Controller 沒法穿透 Facade 去使用 Service的方法。

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

是這樣嘛?

回答
編輯回答
近義詞

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

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

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

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

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

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

2018年2月21日 09:33