chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

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

掃碼添加小助手

加入工程師交流群


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

1. 依賴倒置(Dependency Inversion)

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

https://medium.com/p/de6abf20e423

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

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

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

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

4. 依賴注入(Dependency Injection)

該原則意味著依賴應(yīng)該在運(yùn)行時(shí)通過(guò)構(gòu)造函數(shù)注入。在下面的例子中,Action Interface通過(guò)HumanAction Implementation注入到Human類中,從而決定在運(yùn)行時(shí)實(shí)現(xiàn)哪個(gè)特定的動(dòng)作。這種技術(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. 單一職責(zé)(Single Responsibility)

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

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

6. DRY(Don’t Repeat Yourself)

該原則旨在通過(guò)避免重復(fù)代碼來(lái)消除冗余。如果存在針對(duì)某些行為的現(xiàn)有功能,則應(yīng)該重復(fù)使用,而不是在多個(gè)實(shí)例中拷貝相同的代碼片段。

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

7. 開(kāi)閉原則(Open-Closed)

軟件構(gòu)件應(yīng)該對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。

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

8. 持久化透明(Persistence Ignorance)

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

9. YAGNI

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

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

在離開(kāi)的時(shí)候要讓露營(yíng)地比來(lái)的時(shí)候更干凈。

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

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

如果對(duì)于每個(gè)類型為S的對(duì)象o1,都有一個(gè)類型為T的對(duì)象o2,這樣對(duì)于用T定義的所有程序P,當(dāng)o1取代o2時(shí),P的行為不變,那么S就是T的子類型。

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

12. 封裝(Encapsulation)

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

13. 松耦合(Loose Coupling)

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

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

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

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

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

15. 接口隔離(Interface Segregation)

接口隔離原則指出,不應(yīng)強(qiáng)迫客戶端依賴不使用的方法。

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

可以想象這樣一種情況,我們的Income和Expense用例都依賴于支持這兩種用例的業(yè)務(wù)邏輯功能。因此Income用例的很多依賴都和Expense用例相關(guān),而Expense用例的依賴情況也有相同的問(wèn)題?;谝陨嫌懻?,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ū)動(dòng)設(shè)計(jì)的中心模式。通過(guò)將大型應(yīng)用程序或組織分解為單獨(dú)的概念模塊,提供了一種處理復(fù)雜性的方法。每個(gè)概念模塊代表一個(gè)上下文,該上下文與其他上下文分離(因此是有邊界的),并且可以獨(dú)立發(fā)展。理想情況下,每個(gè)限界上下文應(yīng)該可以自由的為其中的概念選擇自己的名稱,并且應(yīng)該獨(dú)占的訪問(wèn)自己的持久化存儲(chǔ)。

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

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

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

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

19. 模塊化(Modularization)

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

20. 抽象(Abstraction)

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

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

21. KISS(Keep It Simple, Stupid)

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

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

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

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

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



審核編輯 :李倩


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

    關(guān)注

    38

    文章

    4514

    瀏覽量

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

    關(guān)注

    0

    文章

    404

    瀏覽量

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

    關(guān)注

    0

    文章

    64

    瀏覽量

    10593

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    嵌入式軟件分層架構(gòu)設(shè)計(jì)原則

    嵌入式軟件分層架構(gòu)的設(shè)計(jì)原則如下: 模塊化和可擴(kuò)展性:每一層應(yīng)當(dāng)保持松耦合,這樣當(dāng)硬件變化或某些功能擴(kuò)展時(shí),只需要修改對(duì)應(yīng)的層次,而不影響整體架構(gòu)。 硬件無(wú)關(guān)性:上層代碼應(yīng)當(dāng)盡量避免直
    發(fā)表于 11-28 07:05

    RESTful API設(shè)計(jì)原則: 構(gòu)建易用、可擴(kuò)展的API接口。

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

    RESTful API設(shè)計(jì)原則: 構(gòu)建易用、可擴(kuò)展的API接口

    基本原則 Roy Fielding博士在其博士論文中定義了REST架構(gòu)的六大核心約束: 統(tǒng)一接口(Uniform Interface):確保API使用標(biāo)準(zhǔn)化的交互
    的頭像 發(fā)表于 10-20 13:45 ?336次閱讀

    汽車軟件開(kāi)發(fā)階段安全的意義與原則

    上海磐時(shí)PANSHI“磐時(shí),做汽車企業(yè)的安全智庫(kù)”好書(shū)分享/《一本書(shū)讀懂智能汽車安全》汽車軟件開(kāi)發(fā)階段安全的意義與原則本文節(jié)選自SASETECH汽車安全社區(qū)組織編寫(xiě)的《一本書(shū)讀懂智能汽車安全》,該書(shū)
    的頭像 發(fā)表于 09-05 16:16 ?673次閱讀
    汽車<b class='flag-5'>軟件</b>開(kāi)發(fā)階段安全的意義與<b class='flag-5'>原則</b>

    電氣設(shè)計(jì)線號(hào)標(biāo)記規(guī)則

    方法及實(shí)際應(yīng)用中的注意事項(xiàng)。 一、線號(hào)標(biāo)記的基本原則 1. 唯一性原則 每根導(dǎo)線或電纜必須具有唯一的標(biāo)識(shí),這是線號(hào)標(biāo)記最核心的要求。在同一個(gè)電氣系統(tǒng)中,不允許出現(xiàn)重復(fù)的線號(hào),否則可能導(dǎo)致嚴(yán)重的操作錯(cuò)誤。實(shí)踐中通常采
    的頭像 發(fā)表于 08-23 23:12 ?2588次閱讀
    電氣設(shè)計(jì)線號(hào)標(biāo)記規(guī)則

    單片機(jī)9種常用軟件架構(gòu)-C語(yǔ)言

    單片機(jī)9種常用軟件架構(gòu)-C語(yǔ)言
    發(fā)表于 06-10 20:35

    解鎖未來(lái)汽車電子技術(shù):軟件定義車輛與區(qū)域架構(gòu)深度解析

    解鎖未來(lái)汽車電子技術(shù):軟件定義車輛與區(qū)域架構(gòu)深度解析 ——立即下載白皮書(shū),搶占智能汽車發(fā)展先機(jī) *附件:解鎖未來(lái)汽車電子技術(shù):軟件定義車輛與區(qū)域架構(gòu)深度解析.pdf 為什么這份白皮書(shū)值
    的頭像 發(fā)表于 04-27 11:58 ?1095次閱讀

    知識(shí)點(diǎn)積累——什么是3W原則和20H原則

    在繪制高速板卡時(shí),經(jīng)常會(huì)聽(tīng)到工程師們提到3W原則和20H原則,今天來(lái)和大伙簡(jiǎn)單的聊一下這兩個(gè)原則! 3W原則3W
    發(fā)表于 04-16 11:18

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

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

    華為發(fā)布新一代站點(diǎn)能源架構(gòu)及AI數(shù)據(jù)中心建設(shè)原則

    在MWC25巴塞羅那期間舉辦的產(chǎn)品與解決方案發(fā)布會(huì)上,華為數(shù)據(jù)中心能源及關(guān)鍵供電產(chǎn)品線總裁何波發(fā)布新一代站點(diǎn)能源架構(gòu)“Single SitePower”及AI數(shù)據(jù)中心建設(shè)原則RASTM,旨在加速運(yùn)營(yíng)商成為能源產(chǎn)消者,打造更優(yōu)ICT能源基礎(chǔ)設(shè)施,把握AI新時(shí)代機(jī)遇。
    的頭像 發(fā)表于 03-06 11:16 ?918次閱讀

    個(gè)優(yōu)秀的嵌入式軟件架構(gòu)師” — AWFlow

    在大型項(xiàng)目的軟件開(kāi)發(fā)過(guò)程中,模塊化開(kāi)發(fā)面臨著接口設(shè)計(jì)不合理、代碼沖突以及模塊間不兼容等問(wèn)題,導(dǎo)致團(tuán)隊(duì)協(xié)作效率低下。為了解決這些問(wèn)題,嵌入式軟件架構(gòu)師”—AWFlow,應(yīng)運(yùn)而生!在大型項(xiàng)目
    的頭像 發(fā)表于 02-10 16:44 ?774次閱讀
    一<b class='flag-5'>個(gè)</b>優(yōu)秀的嵌入式<b class='flag-5'>軟件</b>“<b class='flag-5'>架構(gòu)</b>師” — AWFlow

    PCB板設(shè)計(jì)測(cè)試點(diǎn)的基本原則

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

    光通信網(wǎng)絡(luò)故障排除技巧

    光通信網(wǎng)絡(luò)以其高速、大容量和抗干擾性在現(xiàn)代通信系統(tǒng)中占據(jù)著舉足輕重的地位。然而,隨著網(wǎng)絡(luò)規(guī)模的擴(kuò)大和復(fù)雜性的增加,故障排除成為了網(wǎng)絡(luò)維護(hù)中的一項(xiàng)重要任務(wù)。 1. 故障診斷的基本原則 在進(jìn)行光通信
    的頭像 發(fā)表于 01-23 09:42 ?1652次閱讀

    AN197 GD32L23x軟件開(kāi)發(fā)指南

    電子發(fā)燒友網(wǎng)站提供《AN197 GD32L23x軟件開(kāi)發(fā)指南.pdf》資料免費(fèi)下載
    發(fā)表于 01-17 16:18 ?0次下載
    AN197 GD32L<b class='flag-5'>23</b>x<b class='flag-5'>軟件</b>開(kāi)發(fā)指南

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

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