分層架構是將軟件模塊按水平切分的方式分成多個層,最基本的分層方式是表現層、業務邏輯領域層和數據持久層(MVC)。也有分為四層表現層、應用層、領域層和基礎層,業務邏輯在領域層,基礎層比持久層范圍更大,不僅可以提供持久層服務,還提供緩存服務。四層中應用層是對三層架構中領域層的進一步拆分,但業務邏輯永遠在領域層。
分層架構的好處是高內聚低耦合,單一職責、提高可復用性和降低維護成本,缺點是開發成本高、性能低和可擴展性低。
分層架構的好處
分層架構的目的是通過關注點分離來降低系統的復雜度,同時滿足單一職責、高內聚、低耦合、提高可復用性和降低維護成本。
- 單一職責:每一層只負責一個職責,職責邊界清晰,如持久層只負責數據查詢和存儲,領域層只負責處理業務邏輯。
- 高內聚:分層是把相同的職責放在同一個層中,所有業務邏輯內聚在領域層。這樣做有什么好處呢?試想一下假如業務邏輯分散在每一層,修改功能需要去各層修改,測試業務邏輯需要測試所有層的代碼,這樣增加了整個軟件的復雜度和測試難度。
- 低耦合:依賴關系非常簡單,上層只能依賴於下層,沒有循環依賴。
- 可復用:某項能力可以復用給多個業務流程。比如持久層提供按照還款狀態查詢信用卡的服務,既可以給申請信用卡做判斷使用,也可以給展示未還款信用卡使用。
- 易維護:面對變更容易修改。把所有對外接口都放在對外接口層,一旦外部依賴的接口被修改,只需要改這個層的代碼即可。
以上這些既是分層的好處也是分層的原則,大家在分層時需要遵循以上原則,不恰當的分層會違背了分層架構的初衷。
分層架構的缺點
分層架構也有幾個缺點
- 開發成本高:因為多層分別承擔各自的職責,增加功能需要在多個層增加代碼,這樣難免會增加開發成本。但是合理的能力抽象可以提高了復用性,又能降低開發成本。
- 性能略低:業務流需要經過多層代碼的處理,性能會有所消耗。
- 可擴展性低:因為上下層之間存在耦合度,所有有些功能變化可能涉及到多層的修改。