99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

3天內(nèi)不再提示

軟件架構(gòu)的23個基本原則

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

掃碼添加小助手

加入工程師交流群


軟件體系架構(gòu)基于一組適用于各種軟件系統(tǒng)的基本原則,有經(jīng)驗的架構(gòu)師知道這些原則,并且能夠在軟件產(chǎn)品的正確位置實現(xiàn)特定的原則。下面我們快速瀏覽一下架構(gòu)師日常遵循的基本原則。

1. 依賴倒置(Dependency Inversion)

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

https://medium.com/p/de6abf20e423

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

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

3. 控制反轉(zhuǎn)(Inversion of Control)

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

4. 依賴注入(Dependency Injection)

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

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)

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

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

6. DRY(Don’t Repeat Yourself)

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

每個知識片段在系統(tǒng)中都必須有單一、明確、權(quán)威的表示。

7. 開閉原則(Open-Closed)

軟件構(gòu)件應該對擴展開放,對修改關(guān)閉。

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

8. 持久化透明(Persistence Ignorance)

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

9. YAGNI

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

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

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

這里的主要思想是,當開發(fā)時遇到反模式,要堅持重構(gòu)代碼。隨著時間的推移,這會提高代碼質(zhì)量。

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

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

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

12. 封裝(Encapsulation)

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

13. 松耦合(Loose Coupling)

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

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

14. 內(nèi)聚(Cohesion)

內(nèi)聚是指模塊內(nèi)的元素依賴的程度。某種意義上說,是對類的方法和數(shù)據(jù)以及該類所服務的某種統(tǒng)一目的或概念之間關(guān)系強度的度量。

構(gòu)建高內(nèi)聚的類是一種最佳實踐,有利于實現(xiàn)單一責任原則、松耦合等。

15. 接口隔離(Interface Segregation)

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

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

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

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)

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

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

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

18. 多態(tài)(Polymorphism)

這實際上屬于面向?qū)ο缶幊痰?大支柱,鼓勵使用可以以多種形式提供的接口,多態(tài)性意味著具有多種形式的實體。

19. 模塊化(Modularization)

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

20. 抽象(Abstraction)

這也屬于面向?qū)ο缶幊痰乃拇笾е?

在研究物體或系統(tǒng)時去除物理的、空間的或時間的細節(jié)或?qū)傩砸约凶⒁饬τ诟匾牟糠?,本質(zhì)上與泛化過程相似。

21. KISS(Keep It Simple, Stupid)

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

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

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

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

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



審核編輯 :李倩


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

    關(guān)注

    38

    文章

    4392

    瀏覽量

    222849
  • 框架
    +關(guān)注

    關(guān)注

    0

    文章

    404

    瀏覽量

    17903
  • 軟件架構(gòu)
    +關(guān)注

    關(guān)注

    0

    文章

    64

    瀏覽量

    10499

原文標題:軟件架構(gòu)的23個基本原則

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    基于SCA的軟件無線電系統(tǒng)的概念與架構(gòu)

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

    PCB板設(shè)計測試點的基本原則

    線路板PCB測試點設(shè)置的原則是確保測試的準確性和高效性,同時避免對PCB板造成不必要的損害。以下是一些關(guān)鍵的設(shè)置原則: 1.測試點的分布?: 測試點應均勻分布在PCB板上,避免集中在某個小區(qū)域內(nèi),以
    的頭像 發(fā)表于 02-08 11:35 ?1087次閱讀

    通訊電源故障排除技巧 通訊電源與其他設(shè)備的連接方式

    通訊電源故障排除技巧 1. 故障診斷的基本原則 在進行通訊電源故障排除時,應遵循以下基本原則: 安全第一 :確保在操作過程中遵循所有安全規(guī)程,避免觸電等危險。 系統(tǒng)性檢查 :從電源輸入到輸出,逐步
    的頭像 發(fā)表于 12-16 15:25 ?1267次閱讀

    射頻電路設(shè)計的基本原則 射頻信號干擾的解決方法

    射頻電路設(shè)計的基本原則 射頻電路設(shè)計是一復雜的過程,需要考慮多種因素以確保電路的性能和可靠性。以下是一些基本的設(shè)計原則: 頻率選擇性 :射頻電路需要根據(jù)工作頻率選擇合適的組件和設(shè)計參數(shù),以確保電路
    的頭像 發(fā)表于 12-03 09:59 ?1977次閱讀

    SQL數(shù)據(jù)庫設(shè)計的基本原則

    SQL數(shù)據(jù)庫設(shè)計的基本原則 1. 理解需求 在設(shè)計數(shù)據(jù)庫之前,首先要與業(yè)務團隊緊密合作,了解業(yè)務需求。這包括數(shù)據(jù)的類型、數(shù)據(jù)的使用方式、數(shù)據(jù)的增長預期等。需求分析是數(shù)據(jù)庫設(shè)計的基礎(chǔ),它決定了數(shù)據(jù)庫
    的頭像 發(fā)表于 11-19 10:23 ?743次閱讀

    案例賞析 近期23智慧路燈燈桿落地案例匯總!

    『案例賞析』近期23智慧路燈燈桿落地案例匯總!
    的頭像 發(fā)表于 11-13 11:10 ?757次閱讀
    案例賞析 近期<b class='flag-5'>23</b><b class='flag-5'>個</b>智慧路燈燈桿落地案例匯總!

    PCB上設(shè)置測試點的基本原則

    線路板PCB測試點設(shè)置的原則是確保測試的準確性和高效性,同時避免對PCB板造成不必要的損害。以下是一些關(guān)鍵的設(shè)置原則
    的頭像 發(fā)表于 10-22 10:57 ?2163次閱讀

    連接器選型的幾項基本原則

    在連接器的領(lǐng)域連接器的選型是每個連接器人都必須要經(jīng)歷的事情,在連接器選型的道路上有很多需要注意的東西,稍有不慎就會導致最終選擇的連接器無法投入使用。蓬生電子給大家整理了連接器選型的幾項基本原則,來
    的頭像 發(fā)表于 10-17 17:29 ?818次閱讀

    差動保護動作電流整定原則

    差動保護動作電流整定原則涉及多個方面,以下是對該原則的介紹: 一、基本原則 對稱性原則 :差動保護動作電流應該在正、負序電流及零序電流相等時啟動。這樣差動保護在正常工作時不至于誤動作,
    的頭像 發(fā)表于 10-08 15:45 ?2300次閱讀

    探針頭型怎么選擇尺寸

    探針頭型的選擇尺寸是一復雜的過程,需要考慮多個因素,包括被測點的形狀、大小、間距、測試環(huán)境以及測試要求等。以下是一些選擇探針頭型尺寸的基本原則和步驟: 一、基本原則 測量精度 :首先,需要明確測試
    的頭像 發(fā)表于 09-07 10:48 ?1737次閱讀

    選擇電氣控制方案時的基本原則

    一系列基本原則。 控制方式與設(shè)備適應性 控制方式的選擇應與設(shè)備的通用化和專用化相適應。對于通用設(shè)備,可以采用標準化的控制方式,以降低設(shè)計和生產(chǎn)成本;而對于專用設(shè)備,則需要根據(jù)其特殊需求定制控制方式,以滿足特定的
    的頭像 發(fā)表于 08-28 10:47 ?758次閱讀

    電氣控制系統(tǒng)設(shè)計時的基本原則

    在確定電氣控制方案時,工程師必須考慮一系列復雜且互相關(guān)聯(lián)的因素,這些因素共同決定了最終系統(tǒng)的性能、可靠性以及安全性。以下是對電氣控制方案確定原則的詳細分析: 自動化程度與國情相適應:選擇電氣控制方案
    的頭像 發(fā)表于 08-22 11:16 ?1432次閱讀

    限流保護電路的基本原

    限流保護電路的基本原理是一復雜但至關(guān)重要的概念,它涉及到電子電路中電流控制的多個方面。這種電路的主要目的是在電流超過預設(shè)的安全閾值時,通過一系列機制來限制或切斷電流,從而保護電路中的元件和設(shè)備免受損壞。以下是對限流保護電路基本原
    的頭像 發(fā)表于 08-19 17:55 ?4565次閱讀

    斷路器選擇額定電流的基本原則

    斷路器的基本概念 斷路器是一種用于保護電氣系統(tǒng)的設(shè)備,當系統(tǒng)中的電流超過預定值時,斷路器會自動切斷電源,以防止設(shè)備損壞或火災等危險。 斷路器的工作原理 斷路器的工作原理基于電磁力和熱效應。當電流超過額定值時,電磁力會使斷路器的觸點分離,同時熱效應會使斷路器的熱元件變形,從而實現(xiàn)斷路。 斷路器的類型 斷路器有多種類型,包括微型斷路器、塑殼斷路器、框架斷路器等。不同類型的斷路器適用于不同的應用場景和負載要求。
    的頭像 發(fā)表于 08-14 15:09 ?2591次閱讀

    組成放大電路的基本原則是什么?

    組成放大電路的基本原則主要包括以下幾個方面: 1. 穩(wěn)定性原則 定義 :穩(wěn)定性是指放大電路在工作過程中應能夠保持其性能不受外界干擾或內(nèi)部變化的影響。 實現(xiàn)方式 :通過采取一些措施來保持電路的工作點
    的頭像 發(fā)表于 08-07 10:02 ?1423次閱讀