日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

dao层如何调用对象_你的项目应该如何正确分层?

發布時間:2024/9/27 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dao层如何调用对象_你的项目应该如何正确分层? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

你好,歡迎收聽極客視點。

說起應用分層,大部分人都會認為這不是很簡單嘛,就Controller、Service、Mapper三層。但在“簡單”背后,很多人并沒有將各層級的職責劃分清楚。比如在很多代碼中,Controller比Service還多,Service被當成透傳了,這是開發代碼容易被忽略的地方。這樣往往造成層級關系混亂,后續代碼無法復用、維護困難。

此前,公眾號“咖啡拿鐵(ID:close_3092860495)”介紹了優化代碼分層的方法,供你參考。

如何進行分層

一個好的應用分層需要具備以下幾點:

  • 方便后續代碼進行維護擴展;
  • 分層的效果需要讓整個團隊都接受;
  • 各層的職責邊界清晰。

阿里巴巴的分層規范

在阿里的編碼規范中,對分層的要求如下:

1. 開放接口層:可直接封裝 Service 方法暴露成 RPC 接口;通過 Web 封裝成 http 接口;進行網關安全控制、流量控制等。

2. 終端顯示層:各個端的模板渲染并執行顯示的層。當前主要是 velocity 渲染、JS 渲染、JSP 渲染、移動端展示等。

3. Web 層:主要是對訪問控制進行轉發,各類基本參數校驗,或者不復用的業務簡單處理等。

4. Service 層:相對具體的業務邏輯服務層。

5. Manager 層:通用業務處理層,它有如下特征:一是對第三方平臺封裝的層,預處理返回結果及轉化異常信息;二是對Service層通用能力的下沉,如緩存方案、中間件通用處理;三是與DAO層交互,對多個DAO的組合復用。

6 .DAO 層:數據訪問層,與底層 MySQL、Oracle、Hbase 進行數據交互。

阿里巴巴規約中的分層比較清晰,簡單明了,但是描述得還是過于簡單了,很多人還是分不清楚Service層和Manager層之間的關系,導致很多項目中根本沒有Manager層的存在。下面介紹具體業務中應該如何實現分層。

優化分層

首先需要說明的是,如果RPC框架選用Thrift,可能會比其他的RPC框架多出一層,作用和Controller層類似:

最上層的Controller和TService是阿里分層規范中的第一層:輕業務邏輯、參數校驗、異常兜底。通常這種接口可以輕易更換接口類型,所以業務邏輯必須要輕,甚至不做具體邏輯。

其次是Service層,這是業務層,復用性較低,這里推薦每一個Controller方法都對應一個Service,不要把業務編排放在Controller中去做,否則以后你要接入Thrift,又需要把業務編排再做一次,這會導致你每接入一個入口層,代碼都得重新復制一份。如下圖所示:

這樣大量的重復工作必定會導致開發效率下降,所以你要把業務編排邏輯都放進Service層中。

然后是Mannager層,這是可復用邏輯層。這里的Mannager可以是單個服務,比如Cache、MQ等等;也可以是復合的,當你需要調用多個Mannager時,可以將它們合為一個Mannager,比如邏輯上的連表查詢等。如果是httpMannager或rpcMannager,還需要在這一層做一些數據轉換。

再來看DAO層,這是數據庫訪問層。主要負責“操作數據庫的某張表,映射到某個Java對象”,DAO應該只允許自己的Service訪問。

最后順便聊一聊分層領域模型的轉換,在阿里巴巴編碼規約中,列舉了下面幾個領域模型規約:

  • DO(Data Object):與數據庫表結構一一對應,通過DAO層向上傳輸數據源對象。
  • DTO(Data Transfer Object):數據傳輸對象,Service或Manager向外傳輸的對象。
  • BO(Business Object):業務對象,由Service層輸出的封裝業務邏輯的對象。
  • AO(Application Object):應用對象,在Web層與Service層之間抽象的復用對象模型,極為貼近展示層,復用度不高。
  • VO(View Object):顯示層對象,通常是Web向模板渲染引擎層傳輸的對象。
  • Query:數據查詢對象,各層接收上層的查詢請求。注意超過2個參數的查詢封裝,禁止使用Map類來傳輸。

每一個層基本都有自己對應的領域模型,而有些人過于追求每一層都用自己的領域模型,這就導致在一次請求中,出現多次對象轉換。

一個折中的方案是:

  • 允許Service/Manager可以操作數據領域模型。
  • Controller/TService層的領域模型不允許傳入DAO層,這樣就不符合職責劃分了。
  • 同理,不允許DAO層的數據傳入到Controller/TService。

總結

業務分層對于代碼規范是比較重要的,決定后續代碼是否可復用,是否職責清晰、邊界清晰。

以上就是今天的內容,如果你的團隊有更好的分層方法,歡迎留言分享。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的dao层如何调用对象_你的项目应该如何正确分层?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。