Java SpringMVC的工程結構一般來說分為三層,自下而上是Modle層(模型,數據訪問層)、Cotroller層(控制,邏輯控制層)、View層(視圖,頁面顯示層),其中Modle層分為兩層:dao層、service層,MVC架構分層的主要作用是解耦。采用分層架構的好處,普遍接受的是系統分層有利於系統的維護,系統的擴展。就是增強系統的可維護性和可擴展性。
對於Spring這樣的框架,(View\Web)表示層調用控制層(Controller),控制層調用業務層(Service),業務層調用數據訪問層(Dao)。
service層:業務層,用來實現業務邏輯。能調用dao層或者service層,返回數據對象DO或者業務對象BO,BO通常由DO轉化、整合而來,可以包含多個DO的屬性,也可以是只包含一個DO的部分屬性。通常為了簡便,如果無需轉化,service也可以直接返回DO。外部調用(HTTP、RPC)方法也在這一層,對於外部調用來說,service一般會將外部調用返回的DTO轉化為BO。是專注業務邏輯,對於其中需要的數據庫操作,都通過Dao去實現。主要去負責一些業務處理,比如取得連接、關閉數據庫連接、事務回滾,一些復雜的邏輯業務處理就放到service層。
DAO層:負責訪問數據庫進行數據的操作,取得結果集,之后將結果集中的數據取出封裝到VO類對象之后返回給service層。數據層,直接進行數據庫的讀寫操作,返回數據對象DO,DO與數據庫表一一對應。Dao的作用是封裝對數據庫的訪問:增刪改查,不涉及業務邏輯,只是達到按某個條件獲得指定數據的要求。
Cotroller層:叫做控制層,主要的功能是處理用戶發送的請求。主要處理外部請求。調用service層,將service層返回的BO/DO轉化為DTO/VO並封裝成統一返回對象返回給調用方。如果返回數據用於前端模版渲染則返回VO,否則一般返回DTO。不論是DTO還是VO,一般都會對BO/DO中的數據進行一些轉化和整合,比如將gender屬性中的0轉化“男”,1轉化為“女”等。controller的功能主要有5點:參數校驗、調用service層接口實現業務邏輯、轉換業務/數據對象、組裝返回對象、異常處理。
View層:叫做顯示層,主要是負責現實數據。
在實際開發中dao層要先定義出自己的操作標准即標准接口,就是為了解耦合。
稍微小一點的公司一般就3層:
dao->數據層
service -> 業務實現
web -> web 接口
稍微大一點的公司一般最多就7層:
(日志接入,對查問題有幫助的地方才接入日志)
common—>公共方法,公共類,工具類,只有關鍵地方加日志
dao->數據層,不加日志
domain->實體類,不加日志
rpc->調用接口,出入參加日志
sdk-> 給外部提供sdk,例如對外接口,只是提供接口定義,該層沒有業務邏輯,真實的sdk邏輯實現是在service層,不加日志
service -> 業務實現邏輯,單元測試進行層,日志接入:關鍵地方可以加, 實現sdk層的接口方法出入參加日志
web -> web 接口,對外提供http 接口,一般都有邏輯,http 是直接對 c的,看到的ip 是c端用戶的,出入參加日志