日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

軟件架構的23個基本原則

來源: 責編: 時間:2024-04-28 17:17:39 233觀看
導讀軟件體系架構基于一組適用于各種軟件系統的基本原則,有經驗的架構師知道這些原則,并且能夠在軟件產品的正確位置實現特定的原則。下面我們快速瀏覽一下架構師日常遵循的基本原則:1. 依賴倒置(Dependency Inversion)這一

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

wvy28資訊網——每日最新資訊28at.com

1. 依賴倒置(Dependency Inversion)

這一原則表明依賴的方向應該是抽象的,而不是具體實現。如果編譯時依賴在運行時執行的方向上流動,就形成了直接依賴。通過依賴倒置,可以反轉依賴控制的方向。下面的文章更深入的討論了這一原則: How to apply SOLID Software Design Principles to Spring Boot Application (Part 5)[2]wvy28資訊網——每日最新資訊28at.com

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

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

3. 控制反轉(Inversion of Control)

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

4. 依賴注入(Dependency Injection)

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

package az.alizeynalli.di;public interface Action {    void do();}public class HumanAction implements Action {     @Override    public void do() {        System.out.print("run");    }}public class Human  {         Action action;         public Human(Action action) {        this.action = action;    }     @Override    public void do() {                actoin.do();            }}    public static void main(String[] args) {        Human human = new Human(new HumanAction);        human.do();    }

5. 單一職責(Single Responsibility)

該原則的主要思想是限定軟件系統的每個構建塊只承擔唯一的責任。無論構建塊的作用域是什么,是插件、包、類、函數,甚至是變量,應該只有一個職責。這篇文章更深入的討論了這一原則: How to apply SOLID Software Design Principles to Spring Boot Application (Part 1)[3]wvy28資訊網——每日最新資訊28at.com

6. DRY(Don’t Repeat Yourself)

該原則旨在通過避免重復代碼來消除冗余。如果存在針對某些行為的現有功能,則應該重復使用,而不是在多個實例中拷貝相同的代碼片段。wvy28資訊網——每日最新資訊28at.com

每個知識片段在系統中都必須有單一、明確、權威的表示。wvy28資訊網——每日最新資訊28at.com

wvy28資訊網——每日最新資訊28at.com

7. 開閉原則(Open-Closed)

軟件構件應該對擴展開放,對修改關閉。wvy28資訊網——每日最新資訊28at.com

wvy28資訊網——每日最新資訊28at.com

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

8. 持久化透明(Persistence Ignorance)

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

9. YAGNI

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

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

在離開的時候要讓露營地比來的時候更干凈。wvy28資訊網——每日最新資訊28at.com

wvy28資訊網——每日最新資訊28at.com

這里的主要思想是,當開發時遇到反模式,要堅持重構代碼。隨著時間的推移,這會提高代碼質量。wvy28資訊網——每日最新資訊28at.com

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

如果對于每個類型為S的對象o1,都有一個類型為T的對象o2,這樣對于用T定義的所有程序P,當o1取代o2時,P的行為不變,那么S就是T的子類型。wvy28資訊網——每日最新資訊28at.com

wvy28資訊網——每日最新資訊28at.com

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

12. 封裝(Encapsulation)

軟件系統的不同構建塊應該通過封裝來限制外界對其組件的訪問,可以通過在類范圍內設置組件為私有或在插件范圍內設置訪問限制來實現(就java而言),從而隱藏信息。wvy28資訊網——每日最新資訊28at.com

13. 松耦合(Loose Coupling)

軟件架構中最重要的原則之一是松耦合,這一原則表明軟件系統的依賴關系應該松散,系統的一部分發生變化,對其他部分的影響應該最小。松耦合可以通過依賴倒置、異步消息中間件、事件源等實現。下面的文章深入探討了軟件工程中不同形式的耦合: 9 Forms of Coupling in Software Architecture[4]wvy28資訊網——每日最新資訊28at.com

14. 內聚(Cohesion)

內聚是指模塊內的元素依賴的程度。某種意義上說,是對類的方法和數據以及該類所服務的某種統一目的或概念之間關系強度的度量。wvy28資訊網——每日最新資訊28at.com

wvy28資訊網——每日最新資訊28at.com

構建高內聚的類是一種最佳實踐,有利于實現單一責任原則、松耦合等。wvy28資訊網——每日最新資訊28at.com

15. 接口隔離(Interface Segregation)

接口隔離原則指出,不應強迫客戶端依賴不使用的方法。wvy28資訊網——每日最新資訊28at.com

wvy28資訊網——每日最新資訊28at.com

應該明確的是,這個原則主要適用于靜態類型的編程語言,如Java、C等。在像Python或Ruby這樣的動態類型語言中,這個原則沒有太大意義。wvy28資訊網——每日最新資訊28at.com

可以想象這樣一種情況,我們的Income和Expense用例都依賴于支持這兩種用例的業務邏輯功能。因此Income用例的很多依賴都和Expense用例相關,而Expense用例的依賴情況也有相同的問題。基于以上討論,ISP違規情況如下:wvy28資訊網——每日最新資訊28at.com

package az.alizeynalli.cashflow.core.service;public interface ConverterService {    Income convertIncome(Income income);    Expense convertExpense(Expense expense);}@Componentpublic class ExpenseConverterServiceImpl implements ConverterService {    @Override    public Income convertIncome(Income income) {        throw new UnsupportedOperationException();    }    @Override    public Expense convertExpense(Expense expense) {        // convert expense here        return expense;    }}@Componentpublic class IncomeConverterServiceImpl implements ConverterService {    @Override    public Income convertIncome(Income income) {        // convert income here        return income;    }    @Override    public Expense convertExpense(Expense expense) {                throw new UnsupportedOperationException();    }}

16. 限界上下文(Bounded Context)

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

wvy28資訊網——每日最新資訊28at.com

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

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

18. 多態(Polymorphism)

這實際上屬于面向對象編程的4大支柱,鼓勵使用可以以多種形式提供的接口,多態性意味著具有多種形式的實體。wvy28資訊網——每日最新資訊28at.com

19. 模塊化(Modularization)

模塊化是將軟件系統劃分為多個獨立模塊的過程,每個模塊獨立工作。這一原則是應用于軟件系統靜態架構的單一職責分離原則的另一種形式。wvy28資訊網——每日最新資訊28at.com

20. 抽象(Abstraction)

這也屬于面向對象編程的四大支柱:wvy28資訊網——每日最新資訊28at.com

在研究物體或系統時去除物理的、空間的或時間的細節或屬性以集中注意力于更重要的部分,本質上與泛化過程相似。wvy28資訊網——每日最新資訊28at.com

wvy28資訊網——每日最新資訊28at.com

21. KISS(Keep It Simple, Stupid)

按照字面意思理解,這一原則激勵工程師保持代碼簡單和愚蠢(容易理解),避免他人誤解。wvy28資訊網——每日最新資訊28at.com

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

這一原則是敏捷軟件開發宣言的基礎,基于軟件系統應該以增量和迭代的方式開發的思想,每一次迭代都會增加系統功能并保證其運行。wvy28資訊網——每日最新資訊28at.com

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

或者叫信息嫉妒(information envying),是封裝或信息隱藏原則的另一個術語,規定軟件系統的不同部分應該只擁有需要的知識。wvy28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-86201-0.html軟件架構的23個基本原則

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Python中Lambda作為參數傳遞用著太爽了

下一篇: C#中JSON處理的綜合指南

標簽:
  • 熱門焦點
  • 紅魔電競平板評測:大屏幕硬實力

    前言:三年的疫情因為要上網課的原因激活了平板市場,如今網課的時代已經過去,大家的生活都恢復到了正軌,這也就意味著,真正考驗平板電腦生存的環境來了。也就是面對著這種殘酷的
  • 6月iOS設備性能榜:M2穩居榜首 A系列只能等一手3nm來救

    沒有新品發布,自然iOS設備性能榜的上榜設備就沒有什么更替,僅僅只有跑分變化而產生的排名變動,畢竟蘋果新品的發布節奏就是這樣的,一年下來也就幾個移動端新品,不會像安卓廠商,一
  • Raft算法:保障分布式系統共識的穩健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可復制、可冗余、可容錯”)的首字母縮寫。Raft算法是一種用于在分布式系統
  • 一文看懂為蘋果Vision Pro開發應用程序

    譯者 | 布加迪審校 | 重樓蘋果的Vision Pro是一款混合現實(MR)頭戴設備。Vision Pro結合了虛擬現實(VR)和增強現實(AR)的沉浸感。其高分辨率顯示屏、先進的傳感器和強大的處理能力
  • 梁柱接棒兩年,騰訊音樂闖出新路子

    文丨田靜 出品丨牛刀財經(niudaocaijing)7月5日,企鵝FM發布官方公告稱由于業務調整,將于9月6日正式停止運營,這意味著騰訊音樂長音頻業務走向消亡。騰訊在長音頻領域還在摸索。為
  • 中國家電海外掘金正當時|出海專題

    作者|吳南南編輯|胡展嘉運營|陳佳慧出品|零態LT(ID:LingTai_LT)2023年,出海市場戰況空前,中國創業者在海外紛紛摩拳擦掌,以期能夠把中國的商業模式、創業理念、戰略打法輸出海外,他們依
  • 簽約井川里予、何丹彤,單視頻點贊近千萬,MCN黑馬永恒文希快速崛起!

    來源:視聽觀察永恒文希傳媒作為一家MCN公司,說起它的名字來,可能大家會覺得有點兒陌生,但是說出來下面一串的名字之后,或許大家就會感到震驚,原來這么多網紅,都簽約這家公司了。根
  • 東方甄選單飛:有些鳥注定是關不住的

    文/彭寬鴻編輯/羅卿東方甄選創始人俞敏洪帶隊的“7天甘肅行”直播活動已在近日順利收官。成立后一年多時間里,東方甄選要脫離抖音自立門戶的傳聞不絕于耳,“7
  • 三星顯示已開始為AR設備研發硅基LED微顯示屏

    7月18日消息,據外媒報道,隨著蘋果首款頭顯產品Vision Pro在6月份正式推出,AR/VR/MR等頭顯產品也就將成為各大公司下一個重要的競爭領域,對顯示屏這一關
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
狠狠入ady亚洲精品| 欧美色欧美亚洲另类二区| 欧美在线一区二区| 久久综合一区| 欧美日韩在线播| 国产精品综合视频| 在线精品视频一区二区三四| 亚洲精品久久久久| 亚洲手机视频| 久久久久一区二区三区| 欧美精品粉嫩高潮一区二区| 国产精品欧美一区喷水| 在线成人小视频| 亚洲深夜av| 猛干欧美女孩| 国产精品网站视频| 亚洲丰满在线| 亚洲在线成人| 猛干欧美女孩| 国产精品美女xx| 亚洲国产小视频在线观看| 亚洲自拍偷拍视频| 免费日韩成人| 国产日韩欧美三区| 99热这里只有精品8| 久久国产88| 欧美三级视频在线观看| 激情五月***国产精品| 国产精品99久久久久久久久| 久久亚洲午夜电影| 国产精品一区二区三区免费观看 | 国产亚洲一区二区在线观看| 亚洲高清免费在线| 小黄鸭视频精品导航| 欧美精品久久一区二区| 激情综合视频| 香蕉乱码成人久久天堂爱免费| 欧美黄在线观看| 国内外成人免费激情在线视频| 国产精品99久久久久久久久久久久| 久久嫩草精品久久久久| 国产精品一卡二| 宅男精品视频| 欧美精品三区| 亚洲国产欧美一区| 久久精品一二三区| 国产精品女人网站| 一区二区三区欧美在线观看| 免费观看在线综合| 尤物精品在线| 久久精品中文字幕一区二区三区 | 亚洲人被黑人高潮完整版| 久久福利一区| 国产精品久久久久久久久久尿| 最近中文字幕日韩精品| 久久亚裔精品欧美| 国产亚洲福利社区一区| 亚洲专区一区| 国产精品福利在线观看| 一本色道久久| 欧美日韩精品一区二区天天拍小说| 亚洲国产精品女人久久久| 久久久久久噜噜噜久久久精品| 国产麻豆9l精品三级站| 亚洲一区二区av电影| 欧美三级特黄| 一区二区三欧美| 欧美激情亚洲自拍| 午夜精品在线| 国产精品一卡| 亚洲综合日韩| 国产精品美女视频网站| 亚洲视频999| 欧美三级在线| 宅男精品视频| 国产精品黄视频| 亚洲一区在线观看视频| 国产精品九九| 亚洲欧美美女| 国产精品尤物| 欧美在线免费播放| 国产一区香蕉久久| 久久香蕉国产线看观看网| 一区视频在线| 欧美不卡激情三级在线观看| 亚洲国产精品专区久久| 欧美va天堂va视频va在线| 亚洲经典三级| 欧美日韩国产美女| 中文精品视频| 国产精品素人视频| 久久www成人_看片免费不卡| 国产一区久久| 免费永久网站黄欧美| 亚洲人体1000| 欧美日韩亚洲高清| 亚洲女同在线| 国产在线不卡精品| 另类图片国产| 99精品国产高清一区二区 | 亚洲成色777777在线观看影院| 蜜桃伊人久久| 亚洲美女在线国产| 国产精品成人在线观看| 午夜日韩视频| 悠悠资源网久久精品| 欧美黄网免费在线观看| 中文欧美在线视频| 国产伦理精品不卡| 一区二区三区 在线观看视| 国产精品久久久一区二区三区| 亚洲欧美卡通另类91av| 国际精品欧美精品| 欧美mv日韩mv国产网站app| 一本久道久久综合中文字幕| 国产精品免费看久久久香蕉| 久久久精品一区| 亚洲人体偷拍| 国产精品日本一区二区| 久久久久在线观看| 一本色道久久综合精品竹菊| 国产精品中文字幕欧美| 久久综合九色综合欧美就去吻| 99精品欧美一区| 国产亚洲免费的视频看| 欧美国产高清| 午夜精彩视频在线观看不卡| 在线日韩欧美| 国产精品久久7| 久久这里只有精品视频首页| 一本大道久久a久久综合婷婷| 国产农村妇女精品| 欧美成人一区二区三区在线观看 | 亚洲欧洲精品天堂一级| 国产精品久久久久aaaa| 久久伊人一区二区| 亚洲一区一卡| 亚洲国产成人tv| 国产精品欧美一区喷水| 欧美v国产在线一区二区三区| 亚洲专区一区| 亚洲精品永久免费精品| 国产精品久久久久久五月尺| 欧美一区二区三区四区在线 | 国产精品免费aⅴ片在线观看| 久久一区视频| 亚洲午夜极品| 在线看片第一页欧美| 欧美日韩久久| 久久亚洲一区| 亚洲一区二区三区免费视频| 精久久久久久| 国产精品热久久久久夜色精品三区 | 欧美日本高清视频| 久久久99免费视频| 亚洲一卡久久| 日韩视频免费在线| 玉米视频成人免费看| 国产精品一区在线播放| 欧美片在线观看| 久久亚洲一区二区三区四区| 香蕉久久夜色精品国产| 一区二区三区免费网站| 激情欧美国产欧美| 国产人久久人人人人爽| 欧美视频一区二区三区在线观看| 麻豆精品在线观看| 久久九九久精品国产免费直播| 亚洲一区二区三区在线| 日韩一二三区视频| 亚洲激情网站| 亚洲第一狼人社区| 国外成人在线视频网站| 国产精品亚洲精品| 国产精品久久久久久久久久久久久久 | 亚洲国产高清自拍| 国产欧美一区二区在线观看| 国产精品超碰97尤物18| 欧美精品一区二区三区一线天视频 | 久久免费黄色| 久久精精品视频| 香蕉av福利精品导航| 亚洲一区二区精品在线| 在线中文字幕一区| 99视频超级精品| 亚洲美女中出| 99国内精品久久久久久久软件| 亚洲精品久久久久久下一站| 在线精品国精品国产尤物884a| 国模套图日韩精品一区二区| 国产视频观看一区| 国产情侣久久| 国产三级欧美三级| 国产日韩免费| 国产亚洲综合在线| 国产亚洲欧美中文| 国产一区二区欧美| 国内成人精品一区| 狠狠色综合日日| 一区视频在线看| 在线看片成人| 亚洲国产电影| 亚洲精品网站在线播放gif| 亚洲精品国产系列|