單一職責概念
不要存在多于一個導致類變更的原因,也就是說每個類應該實現單一的職責,否則就應該把類拆分。交雜不清的職責將使得代碼牽一發而動全身,導致代碼混澀難懂,不易修改、難以擴展和復用。如:以前開發C/S程序中的胖客戶端程序,就是將人機交互邏輯、業務加工處理邏輯和數據庫操作邏輯混合在一起。
實現
單一職責原則是進行類的劃分和封裝的基本原則,進行類的具體抽象。盡量做到,類的功能單一和清晰化。
1.根據機能劃分,使用封裝來創建對象之間的分界層,讓設計者可以在分界層的一側進行修改,而不會對另一側產生不良的影響,從而實現層次間的松耦合。
2.當前開發框架一般為分層框架,在分層框架中,已經明確給出了各層的職責,對于業務簡單的小型系統,個人認為類的劃分按照以下步驟即可。
- 前端頁面:職責主要處理用戶操作邏輯(包括有效性驗證、樣式),將公用的控件、組件進行獨立封裝,封裝的組件不進行后臺數據的訪問。功能模塊(獨立頁面)為單位完成各種組件控件的組裝和數據的提取。
- 后端controller層:職責為完成對前端展示數據的格式轉換及提交操作信息的接收;小型信息系統一般以前端獨立頁面(功能模塊)為單位封裝controller,一個controller完成相應功能模塊所有的信息功能。
- 后端services層:職責完成業務邏輯及數據的加工;與controller層封裝類對應,對外接口滿足controller的需求,還需對數據的加工處理、業務規則進行抽象,進一步進行劃分相關業務類,后端services類似設計模式中門面模式,將controller和各種業務邏輯及數據庫邏輯進行隔離,僅提供和controller之間的交互。一般小型簡單系統僅使用后端services類即可完成。
- dao層:職責完成數據持久化問題;dao層類分兩種,一種為需要進行增刪改查操作的表創建一個dao層類(接口);另一種是完成關聯查詢、存儲過程的按照功能劃分獨立的類(接口)
- 實體層:職責則是數據的載體功能;需要完成增刪改查表創建獨立實體;對于關聯查詢創建獨立的數據實體。
拓展
單一職責原則是寫代碼最容易違反的一個原則,違反此原則代碼立即轉換成all in one;
雖然很多框架明確規定各層職責,但程序員經常將代碼寫到一處;
雖然使用面向對象語言,還是面向過程調用
依賴倒置原則概念
依賴倒置原則要求依賴抽象,不要依賴具體;抽象的穩定性決定了系統的穩定性,因為抽象是不變的,依賴于抽象是面向對象設計的精髓。
示例
拓展
控制翻轉(IOC):里氏替換原則解決了子類可以替換父類的問題,但是子類在什么時候創建,由誰創建就是依賴倒置原則要解決的問題。對象使用前,必須創建具體的對象,如A類中調用了B類的方法,則在A類里面需要創建B的實例對象,則A依賴于B。現在讓A依賴于B的父類(接口),A不創建B實例,而是把創建實例的權限交給容器,由容器創建實例給A,容器給那個實例,A用那個實例,A控制權丟失。所謂的容器就是一段代碼,如:工廠類、Spring容器等。
以上就是java面向對象設計原則之單一職責與依賴倒置原則詳解的詳細內容,更多關于java面向對象設原則的資料請關注服務器之家其它相關文章!
原文鏈接:https://blog.csdn.net/guoyp2126/article/details/113941321