国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

軟件架構的23個基本原則

jf_ro2CN3Fa ? 來源:DeepNoMind ? 作者:DeepNoMind ? 2022-12-19 11:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


軟件體系架構基于一組適用于各種軟件系統的基本原則,有經驗的架構師知道這些原則,并且能夠在軟件產品的正確位置實現特定的原則。下面我們快速瀏覽一下架構師日常遵循的基本原則。

1. 依賴倒置(Dependency Inversion)

這一原則表明依賴的方向應該是抽象的,而不是具體實現。如果編譯時依賴在運行時執行的方向上流動,就形成了直接依賴。通過依賴倒置,可以反轉依賴控制的方向。下面的文章更深入的討論了這一原則:

https://medium.com/p/de6abf20e423

2. 關注點分離(Separation of Concerns)

這一原則指出,軟件系統應該按照所做的工作類型來劃分。比方說可以按照業務邏輯、基礎設施或用戶界面劃分為不同的部分。通過將系統劃分為基于不同活動區域的不同部分,使得開發/測試/部署更加容易。SoC是軟件架構模式(如領域驅動設計、六邊形架構、整潔架構)背后的驅動力。

3. 控制反轉(Inversion of Control)

該原則類似于依賴倒置原則,但適用于更廣泛的背景。IoC反轉了由不同的第三方框架(如Spring Framework)管理的控制流。與傳統Java EE程序(由開發工程師按程序初始化Beans)不同,Spring控制Bean的配置,這意味著控制倒置。

4. 依賴注入(Dependency Injection)

該原則意味著依賴應該在運行時通過構造函數注入。在下面的例子中,Action Interface通過HumanAction Implementation注入到Human類中,從而決定在運行時實現哪個特定的動作。這種技術提供了控制依賴的靈活性:

packageaz.alizeynalli.di;

publicinterfaceAction{
voiddo();
}

publicclassHumanActionimplementsAction{

@Override
publicvoiddo(){
System.out.print("run");
}
}

publicclassHuman{

Actionaction;

publicHuman(Actionaction){
this.action=action;
}

@Override
publicvoiddo(){
actoin.do();
}
}

publicstaticvoidmain(String[]args){
Humanhuman=newHuman(newHumanAction);
human.do();
}

5. 單一職責(Single Responsibility)

該原則的主要思想是限定軟件系統的每個構建塊只承擔唯一的責任。無論構建塊的作用域是什么,是插件、包、類、函數,甚至是變量,應該只有一個職責。這篇文章更深入的討論了這一原則:

https://medium.com/p/6b886f6d943e

6. DRY(Don’t Repeat Yourself)

該原則旨在通過避免重復代碼來消除冗余。如果存在針對某些行為的現有功能,則應該重復使用,而不是在多個實例中拷貝相同的代碼片段。

每個知識片段在系統中都必須有單一、明確、權威的表示。

7. 開閉原則(Open-Closed)

軟件構件應該對擴展開放,對修改關閉。

這一原理的簡單描述首先是由Bertrand Meyer提出的。每次都需要修改的軟件系統只會變得一團糟,并且這種混亂的程序很容易在每次修改時出現錯誤。每個新功能都應該最大限度的增加新代碼,最小限度減少舊代碼的更改,理想情況下對舊代碼的更改為零。

8. 持久化透明(Persistence Ignorance)

持久化透明的理念是,代碼應該不受任何數據庫或持久性技術的影響。業務邏輯應該與任何技術無關。如果明天,有更好、更有效、更便宜的持久化技術,應該能夠以不影響上層抽象的方式改變系統的這一部分。

9. YAGNI

You ain’t gonna need it. 這一原則試圖避免軟件系統的過早優化。開發人員通常會在系統中過度設計一些東西,以期在將來的某個時候會有幫助,但這一時刻往往不會到來。

10. 童子軍規則(Boy Scout Rule)

在離開的時候要讓露營地比來的時候更干凈。

這里的主要思想是,當開發時遇到反模式,要堅持重構代碼。隨著時間的推移,這會提高代碼質量。

11. 里氏替換原則(Liskov-Subsititution)

如果對于每個類型為S的對象o1,都有一個類型為T的對象o2,這樣對于用T定義的所有程序P,當o1取代o2時,P的行為不變,那么S就是T的子類型。

Barbara Liskov的這個定義可能聽起來很混亂,但本質上這個原則簡單易懂。如果重述上面的定義,該原則的意思是: 在使用繼承時,繼承的層次結構應該在功能和業務邏輯方面保持一致。子類應該是可以相互替換的,并且不能改變父類的行為。作為一個簡單的例子,可以用“臭名昭著的正方形/矩形”問題。其中正方形不應該是矩形的子類型,因為這兩個幾何形狀的高度和長度的定義是不同的(正方形的高度和長度是相等的,而矩形的高度和長度是不同的)。

12. 封裝(Encapsulation)

軟件系統的不同構建塊應該通過封裝來限制外界對其組件的訪問,可以通過在類范圍內設置組件為私有或在插件范圍內設置訪問限制來實現(就Java而言),從而隱藏信息。

13. 松耦合(Loose Coupling)

軟件架構中最重要的原則之一是松耦合,這一原則表明軟件系統的依賴關系應該松散,系統的一部分發生變化,對其他部分的影響應該最小。松耦合可以通過依賴倒置、異步消息中間件、事件源等實現。下面的文章深入探討了軟件工程中不同形式的耦合:

https://medium.com/p/4d5cf2b3e99e

14. 內聚(Cohesion)

內聚是指模塊內的元素依賴的程度。某種意義上說,是對類的方法和數據以及該類所服務的某種統一目的或概念之間關系強度的度量。

構建高內聚的類是一種最佳實踐,有利于實現單一責任原則、松耦合等。

15. 接口隔離(Interface Segregation)

接口隔離原則指出,不應強迫客戶端依賴不使用的方法。

應該明確的是,這個原則主要適用于靜態類型的編程語言,如Java、C等。在像Python或Ruby這樣的動態類型語言中,這個原則沒有太大意義。

可以想象這樣一種情況,我們的Income和Expense用例都依賴于支持這兩種用例的業務邏輯功能。因此Income用例的很多依賴都和Expense用例相關,而Expense用例的依賴情況也有相同的問題?;谝陨嫌懻摚琁SP違規情況如下:

packageaz.alizeynalli.cashflow.core.service;

publicinterfaceConverterService{
IncomeconvertIncome(Incomeincome);
ExpenseconvertExpense(Expenseexpense);
}

@Component
publicclassExpenseConverterServiceImplimplementsConverterService{

@Override
publicIncomeconvertIncome(Incomeincome){
thrownewUnsupportedOperationException();
}

@Override
publicExpenseconvertExpense(Expenseexpense){
//convertexpensehere
returnexpense;
}
}

@Component
publicclassIncomeConverterServiceImplimplementsConverterService{

@Override
publicIncomeconvertIncome(Incomeincome){
//convertincomehere
returnincome;
}

@Override
publicExpenseconvertExpense(Expenseexpense){

thrownewUnsupportedOperationException();
}
}

16. 限界上下文(Bounded Context)

限界上下文是領域驅動設計的中心模式。通過將大型應用程序或組織分解為單獨的概念模塊,提供了一種處理復雜性的方法。每個概念模塊代表一個上下文,該上下文與其他上下文分離(因此是有邊界的),并且可以獨立發展。理想情況下,每個限界上下文應該可以自由的為其中的概念選擇自己的名稱,并且應該獨占的訪問自己的持久化存儲。

17. 依賴穩定原則(Stable Dependencies)

這一原則指出,軟件系統的不同構建塊應該只依賴于可靠、穩定的工件。這個原則在Docker鏡像術語中更有意義,當我們從docker hub導入不同的依賴時,甚至不知道它們是否可靠/穩定。

18. 多態(Polymorphism)

這實際上屬于面向對象編程的4大支柱,鼓勵使用可以以多種形式提供的接口,多態性意味著具有多種形式的實體。

19. 模塊化(Modularization)

模塊化是將軟件系統劃分為多個獨立模塊的過程,每個模塊獨立工作。這一原則是應用于軟件系統靜態架構的單一職責分離原則的另一種形式。

20. 抽象(Abstraction)

這也屬于面向對象編程的四大支柱:

在研究物體或系統時去除物理的、空間的或時間的細節或屬性以集中注意力于更重要的部分,本質上與泛化過程相似。

21. KISS(Keep It Simple, Stupid)

按照字面意思理解,這一原則激勵工程師保持代碼簡單和愚蠢(容易理解),避免他人誤解。

22. 增量/迭代方法(Incremental/Iterative Approach)

這一原則是敏捷軟件開發宣言的基礎,基于軟件系統應該以增量和迭代的方式開發的思想,每一次迭代都會增加系統功能并保證其運行。

23. 最少知識原則(Least Knowledge)

或者叫信息嫉妒(information envying),是封裝或信息隱藏原則的另一個術語,規定軟件系統的不同部分應該只擁有需要的知識。



審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • soc
    soc
    +關注

    關注

    40

    文章

    4576

    瀏覽量

    229142
  • 框架
    +關注

    關注

    0

    文章

    404

    瀏覽量

    18425
  • 軟件架構
    +關注

    關注

    0

    文章

    64

    瀏覽量

    10642

原文標題:軟件架構的23個基本原則

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    中科本原RISC-V架構 BY320RV0025 DSP正式亮相

    中科本原基于新一代RISC-V架構SummerCore內核的BY320RV0025型DSP于近日正式量產,該芯片面向工業控制、伺服電機、逆變器和變流器等應用領域進行優化設計,相比國外對標產品,其在
    的頭像 發表于 02-12 15:21 ?401次閱讀
    中科<b class='flag-5'>本原</b>RISC-V<b class='flag-5'>架構</b> BY320RV0025 DSP正式亮相

    電氣接線規范詳解

    電氣接線是電力系統、工業設備及民用建筑中不可或缺的基礎環節,其規范性和安全性直接關系到設備運行穩定性和人身財產安全。以下從基本原則、常見類型、操作規范及安全注意事項四方面,系統闡述電氣接線的核心
    的頭像 發表于 01-18 07:41 ?444次閱讀

    直供微電網設計中,設備選型的基本原則是什么?

    、運行模式靈活”的特性,需圍繞“安全優先、適配場景、經濟高效、可靠可控、綠色兼容”五大核心導向,建立科學的設備選型原則體系。以下將從五大核心原則出發,詳細拆解直供微電網設備選型的關鍵邏輯與實踐要求。
    的頭像 發表于 01-16 10:12 ?232次閱讀
    直供微電網設計中,設備選型的<b class='flag-5'>基本原則</b>是什么?

    嵌入式系統軟件架構通常劃分

    嵌入式系統的軟件架構通常劃分如下分層設計: 應用層:環境溫度監測、報警觸發邏輯。 中間件層:支持MQTT協議的網絡通信模塊,用于將溫度數據上傳至云端。 操作系統層:基于FreeRTOS進行多任務管理
    發表于 12-01 07:20

    嵌入式軟件分層架構設計原則

    嵌入式軟件分層架構的設計原則如下: 模塊化和可擴展性:每一層應當保持松耦合,這樣當硬件變化或某些功能擴展時,只需要修改對應的層次,而不影響整體架構。 硬件無關性:上層代碼應當盡量避免直
    發表于 11-28 07:05

    RESTful API設計原則: 構建易用、可擴展的API接口。

    一、理解REST架構的核心約束 1.1 RESTful API的六大基本原則 Roy Fielding博士在其博士論文中定義了REST架構的六大核心約束: 統一接口(Uniform
    的頭像 發表于 10-24 10:45 ?489次閱讀

    RESTful API設計原則: 構建易用、可擴展的API接口

    基本原則 Roy Fielding博士在其博士論文中定義了REST架構的六大核心約束: 統一接口(Uniform Interface):確保API使用標準化的交互
    的頭像 發表于 10-20 13:45 ?801次閱讀

    汽車軟件開發階段安全的意義與原則

    上海磐時PANSHI“磐時,做汽車企業的安全智庫”好書分享/《一本書讀懂智能汽車安全》汽車軟件開發階段安全的意義與原則本文節選自SASETECH汽車安全社區組織編寫的《一本書讀懂智能汽車安全》,該書
    的頭像 發表于 09-05 16:16 ?973次閱讀
    汽車<b class='flag-5'>軟件</b>開發階段安全的意義與<b class='flag-5'>原則</b>

    電氣設計線號標記規則

    方法及實際應用中的注意事項。 一、線號標記的基本原則 1. 唯一性原則 每根導線或電纜必須具有唯一的標識,這是線號標記最核心的要求。在同一電氣系統中,不允許出現重復的線號,否則可能導致嚴重的操作錯誤。實踐中通常采
    的頭像 發表于 08-23 23:12 ?4457次閱讀
    電氣設計線號標記規則

    單片機9種常用軟件架構-C語言

    單片機9種常用軟件架構-C語言
    發表于 06-10 20:35

    Altium Designer 23 軟件下載

    AD 22 到AD 23之間各個子版本更新的細節,有興趣的小伙伴可以訪問嗷疼家的官網專題頁面了解:https://www.altium.com/altium-designer/whats-new通過
    發表于 05-22 16:46 ?6次下載

    解鎖未來汽車電子技術:軟件定義車輛與區域架構深度解析

    解鎖未來汽車電子技術:軟件定義車輛與區域架構深度解析 ——立即下載白皮書,搶占智能汽車發展先機 *附件:解鎖未來汽車電子技術:軟件定義車輛與區域架構深度解析.pdf 為什么這份白皮書值
    的頭像 發表于 04-27 11:58 ?1400次閱讀

    知識點積累——什么是3W原則和20H原則?

    在繪制高速板卡時,經常會聽到工程師們提到3W原則和20H原則,今天來和大伙簡單的聊一下這兩原則! 3W原則3W
    發表于 04-16 11:18

    基于SCA的軟件無線電系統的概念與架構

    1 軟件通信體系架構SCA的基本概念 SCA:Software Communication Architecture,軟件通信架構;繼承了軟件
    的頭像 發表于 03-20 09:30 ?1932次閱讀
    基于SCA的<b class='flag-5'>軟件</b>無線電系統的概念與<b class='flag-5'>架構</b>

    無刷電機電調的基本原

    有關本文所談論的無刷電機內容, 只涉及低速飛行類航模電調的小功率無傳感器應用,講解的理論比較淺顯易懂 ,旨在讓初學者能夠對無刷電機有一比較快的認 識,掌握基本原理和控制方法,可以在短時間內達到
    發表于 03-17 19:57