最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java面向?qū)ο笤O(shè)計(jì)原則之單一職責(zé)與依賴倒置原則詳解

 更新時(shí)間:2021年10月14日 10:11:09   作者:guoyp2126  
這篇文章主要介紹了java面向?qū)ο笤O(shè)計(jì)原則之單一職責(zé)與依賴倒置原則的分析詳解,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家多多進(jìn)步早日升職加薪

單一職責(zé)概念

不要存在多于一個(gè)導(dǎo)致類變更的原因,也就是說每個(gè)類應(yīng)該實(shí)現(xiàn)單一的職責(zé),否則就應(yīng)該把類拆分。交雜不清的職責(zé)將使得代碼牽一發(fā)而動全身,導(dǎo)致代碼混澀難懂,不易修改、難以擴(kuò)展和復(fù)用。如:以前開發(fā)C/S程序中的胖客戶端程序,就是將人機(jī)交互邏輯、業(yè)務(wù)加工處理邏輯和數(shù)據(jù)庫操作邏輯混合在一起。

實(shí)現(xiàn)

單一職責(zé)原則是進(jìn)行類的劃分和封裝的基本原則,進(jìn)行類的具體抽象。盡量做到,類的功能單一和清晰化。

1.根據(jù)機(jī)能劃分,使用封裝來創(chuàng)建對象之間的分界層,讓設(shè)計(jì)者可以在分界層的一側(cè)進(jìn)行修改,而不會對另一側(cè)產(chǎn)生不良的影響,從而實(shí)現(xiàn)層次間的松耦合。
2.當(dāng)前開發(fā)框架一般為分層框架,在分層框架中,已經(jīng)明確給出了各層的職責(zé),對于業(yè)務(wù)簡單的小型系統(tǒng),個(gè)人認(rèn)為類的劃分按照以下步驟即可。

  • 前端頁面:職責(zé)主要處理用戶操作邏輯(包括有效性驗(yàn)證、樣式),將公用的控件、組件進(jìn)行獨(dú)立封裝,封裝的組件不進(jìn)行后臺數(shù)據(jù)的訪問。功能模塊(獨(dú)立頁面)為單位完成各種組件控件的組裝和數(shù)據(jù)的提取。
  • 后端controller層:職責(zé)為完成對前端展示數(shù)據(jù)的格式轉(zhuǎn)換及提交操作信息的接收;小型信息系統(tǒng)一般以前端獨(dú)立頁面(功能模塊)為單位封裝controller,一個(gè)controller完成相應(yīng)功能模塊所有的信息功能。
  • 后端services層:職責(zé)完成業(yè)務(wù)邏輯及數(shù)據(jù)的加工;與controller層封裝類對應(yīng),對外接口滿足controller的需求,還需對數(shù)據(jù)的加工處理、業(yè)務(wù)規(guī)則進(jìn)行抽象,進(jìn)一步進(jìn)行劃分相關(guān)業(yè)務(wù)類,后端services類似設(shè)計(jì)模式中門面模式,將controller和各種業(yè)務(wù)邏輯及數(shù)據(jù)庫邏輯進(jìn)行隔離,僅提供和controller之間的交互。一般小型簡單系統(tǒng)僅使用后端services類即可完成。
  • dao層:職責(zé)完成數(shù)據(jù)持久化問題;dao層類分兩種,一種為需要進(jìn)行增刪改查操作的表創(chuàng)建一個(gè)dao層類(接口);另一種是完成關(guān)聯(lián)查詢、存儲過程的按照功能劃分獨(dú)立的類(接口)
  • 實(shí)體層:職責(zé)則是數(shù)據(jù)的載體功能;需要完成增刪改查表創(chuàng)建獨(dú)立實(shí)體;對于關(guān)聯(lián)查詢創(chuàng)建獨(dú)立的數(shù)據(jù)實(shí)體。

拓展

單一職責(zé)原則是寫代碼最容易違反的一個(gè)原則,違反此原則代碼立即轉(zhuǎn)換成all in one;
雖然很多框架明確規(guī)定各層職責(zé),但程序員經(jīng)常將代碼寫到一處;
雖然使用面向?qū)ο笳Z言,還是面向過程調(diào)用

依賴倒置原則概念

依賴倒置原則要求依賴抽象,不要依賴具體;抽象的穩(wěn)定性決定了系統(tǒng)的穩(wěn)定性,因?yàn)槌橄笫遣蛔兊模蕾囉诔橄笫敲嫦驅(qū)ο笤O(shè)計(jì)的精髓。

示例

參考:要依賴于抽象,不要依賴于具體

拓展

控制翻轉(zhuǎn)(IOC):里氏替換原則解決了子類可以替換父類的問題,但是子類在什么時(shí)候創(chuàng)建,由誰創(chuàng)建就是依賴倒置原則要解決的問題。對象使用前,必須創(chuàng)建具體的對象,如A類中調(diào)用了B類的方法,則在A類里面需要?jiǎng)?chuàng)建B的實(shí)例對象,則A依賴于B?,F(xiàn)在讓A依賴于B的父類(接口),A不創(chuàng)建B實(shí)例,而是把創(chuàng)建實(shí)例的權(quán)限交給容器,由容器創(chuàng)建實(shí)例給A,容器給那個(gè)實(shí)例,A用那個(gè)實(shí)例,A控制權(quán)丟失。所謂的容器就是一段代碼,如:工廠類、Spring容器等。

以上就是java面向?qū)ο笤O(shè)計(jì)原則之單一職責(zé)與依賴倒置原則詳解的詳細(xì)內(nèi)容,更多關(guān)于java面向?qū)ο笤O(shè)原則的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JAVA中五個(gè)重定向的方式盤點(diǎn)

    JAVA中五個(gè)重定向的方式盤點(diǎn)

    頁面重定向即頁面從當(dāng)前請求的頁面,有條件或者定時(shí)跳轉(zhuǎn)到其他頁面,下面這篇文章主要給大家介紹了關(guān)于JAVA中五個(gè)重定向的方式,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • Java concurrency之AtomicLongFieldUpdater原子類_動力節(jié)點(diǎn)Java學(xué)院整理

    Java concurrency之AtomicLongFieldUpdater原子類_動力節(jié)點(diǎn)Java學(xué)院整理

    AtomicLongFieldUpdater可以對指定"類的 'volatile long'類型的成員"進(jìn)行原子更新。它是基于反射原理實(shí)現(xiàn)的。下面通過本文給大家分享Java concurrency之AtomicLongFieldUpdater原子類的相關(guān)知識,感興趣的朋友一起看看吧
    2017-06-06
  • 基于java web獲取網(wǎng)頁訪問次數(shù)代碼實(shí)例

    基于java web獲取網(wǎng)頁訪問次數(shù)代碼實(shí)例

    這篇文章主要介紹了基于java web獲取網(wǎng)頁訪問次數(shù)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Java數(shù)組去重復(fù)的18種方法示例

    Java數(shù)組去重復(fù)的18種方法示例

    這篇文章主要為大家介紹了Java數(shù)組去重復(fù)的18種寫法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • mybatis中使用CASE?WHEN關(guān)鍵字報(bào)錯(cuò)及解決

    mybatis中使用CASE?WHEN關(guān)鍵字報(bào)錯(cuò)及解決

    這篇文章主要介紹了mybatis中使用CASE?WHEN關(guān)鍵字報(bào)錯(cuò)及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • SpringBoot配置MySQL5.7與MySQL8.0的異同點(diǎn)詳解

    SpringBoot配置MySQL5.7與MySQL8.0的異同點(diǎn)詳解

    MySQL 是 Java 開發(fā)中最常用的數(shù)據(jù)庫之一,而 Spring Boot 提供了便捷的配置方式,隨著 MySQL 8.0 的普及,許多開發(fā)者需要從 MySQL 5.7 升級到 8.0,在實(shí)際開發(fā)中,二者的配置方式既有相似之處,也有一些需要特別注意的不同點(diǎn),所以本文給大家詳細(xì)介紹了它們的異同點(diǎn)
    2024-12-12
  • springboot項(xiàng)目mapper無法自動裝配未找到?UserMapper?類型的Bean解決辦法

    springboot項(xiàng)目mapper無法自動裝配未找到?UserMapper?類型的Bean解決辦法

    這篇文章給大家介紹了springboot項(xiàng)目mapper無法自動裝配,未找到?‘userMapper‘?類型的?Bean解決辦法(含報(bào)錯(cuò)原因),文章通過圖文結(jié)合的方式介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-02-02
  • Java?同步工具與組合類的線程安全性解析

    Java?同步工具與組合類的線程安全性解析

    這篇文章主要介紹了Java?同步工具與組合類的線程安全性解析,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • SpringBoot記錄Http請求日志的方法

    SpringBoot記錄Http請求日志的方法

    這篇文章主要介紹了SpringBoot記錄Http請求日志的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03
  • activiti實(shí)現(xiàn)員工請假流程解析

    activiti實(shí)現(xiàn)員工請假流程解析

    這篇文章主要介紹了activiti實(shí)現(xiàn)員工請假流程解析,本文通過實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07

最新評論

鄂托克旗| 四子王旗| 怀宁县| 大余县| 堆龙德庆县| 吉木乃县| 竹山县| 罗甸县| 梓潼县| 防城港市| 彭州市| 广安市| 孝昌县| 荣成市| 固镇县| 河东区| 西畴县| 嵩明县| 临湘市| 山东省| 连云港市| 罗城| 潮州市| 固阳县| 潼南县| 南汇区| 东兴市| 徐水县| 峨眉山市| 嵩明县| 南城县| 台东市| 淅川县| 泽库县| 龙州县| 石嘴山市| 茶陵县| 军事| 安达市| 华容县| 榆林市|