青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

coreBugZJ

此 blog 已棄。

軟件架構的一致性 (轉)

軟件架構的一致性


  在Brooks的最新力作《設計原本(The Design of Design)》一書中,提及“一致性”對軟件的重要性。他認為:“一致性應該是所有質量原則的根基。好的架構應該是直接的,人們掌握了部分系統后就可以推測出其他部分”。這種所謂“窺一斑而知全豹”的要求,實則是要求保持風格的一致性。


  風格的一致性

  許多軟件公司都會根據自身情況并結合業界規范制定符合本公司情況的編碼規范。例如對命名、格式等諸多風格的要求。這種編碼風格的一致性是相對容易實現的。Brooks提到的一致性,更多地是體現架構風格的一致性。那么,什么是架構風格(Architecture Style)?在微軟撰寫的Application Architecture Guide 2.0一書中,將架構風格定義為一組原則的集合,是為系統家族提供抽象框架的粗粒度模式。架構風格可以改善設計,促進重用,為常見的問題提供可靠的解決方案。而Mary Shaw對架構風格的定義則顯得更加晦澀一些:“架構風格根據結構組織的模式定義系統種類。更具體地說,架構風格定義組件和連接器類型的詞匯及它們如何進行組合的一組約束。”顯然,Mary Shaw認為架構風格定義了架構組成元素的結構以及它們必須遵循的一些原則和約束。

  架構風格可能是對一些架構模式的運用,然而在運用模式之前,首先需要分辨系統的類別。例如系統如果是業務復雜的企業應用,那么就領域層而言,就應該選擇領域模型(Domain Model),通過有效地利用對象、組件和服務保證系統的可重用性與可擴展性。而一旦選擇了領域模型,那么在通常情況下,就不應該在同一個系統的其他模塊中采用事務腳本(Transaction Script)模式。否則,我們就違背了風格的一致性。

  我們常常會將選定的架構風格作為整個系統架構的核心框架。了解了架構風格,就可以有助于了解整個軟件系統。例如,對于數據分析器系統而言,它的核心邏輯是輸入數據流、輸出數據流與分析算法之間的協作。由于分析算法是對數據流的一種篩選和過濾,我們選定的架構風格是采用管道-過濾器(Pipes and Filters)模式。那么,在了解數據分析器的架構時,只要掌握了管道-過濾器模式的核心思想,就能夠快速把握系統架構的核心。這有利于系統知識的延續,并保證整個系統的一致性。

  當然,架構風格的選擇會因為關注點的不同,產生不同的解決方案。例如,從部署的角度來看,我們可能需要選擇分布式部署的物理架構;而對于同一個系統而言,由于需要考慮消息的傳遞,我們又可能選擇消息總線的方式。這與風格的一致性并不矛盾。我們只需保證在同一個關注面上,保持一致的風格即可。


  解決方案的一致性

  風格的一致性屬于軟件架構的層面,與之相似的是保證解決方案的一致性。在整個系統架構中,解決方案必須是一致的,否則就可能導致混亂的架構與代碼。那么,怎樣才能保證解決方案的一致性呢?首要條件是在進行系統架構之前,我們必須根據系統與團隊的情況,制定被團隊成員廣泛接受的架構原則。例如,我們可以為系統制訂分層指導原則。對于領域層,我們遵循DDD的要求,為領域模型確定實體、值對象、聚合根、服務、工廠與資源庫之間的明確劃分,并明確地指出它們應該具備的特征。我們要求應用服務層不應包含任何業務邏輯,只負責UI與領域層之間的消息傳遞,并可調用基礎設施中公共模塊的數據驗證、緩存和安全等功能。我們要求應用服務層不應保留業務對象的狀態,僅僅負責協調應用的活動,并要求所有公開在外的應用服務均定義為接口。

  在制訂了這樣的架構原則后,我們就可以統一系統的解決方案。例如遵循之前的分層指導原則,我們可以獲得如下的針對領域層的統一解決方案:

  如果我們沒有保證解決方案的一致性,并為此制訂統一的架構原則,就會使得團隊人員根據自己的意愿來隨意選擇解決方案。即使某個開發人員選擇的解決方案或許是最優的,但由于系統存在多種不同的解決方案,就可能使得整個系統陷入混亂之中。例如,在我曾經看到過的一個系統中,就存在不一致的數據庫訪問解決方案。在同一個系統中,模塊A使用了Spring的JDBC模板訪問數據庫,而模塊B則直接使用了JDBC。還是在這個系統,模塊C通過使用JDK的map來緩存頻繁讀取的值,而在模塊D中卻又使用了開源的EhCache作為緩存。

  為了保證解決方案的一致性,除了需要事先制訂統一的架構原則之外,前面提到的風格一致性也能夠給予統一的指導和約束。事實上,我們可以將解決方案的一致性理解為對風格一致性的一種實現。除此之外,團隊成員之間的協作與溝通,以及必要的架構評審與代碼走查,都能夠在一定程度上避免解決方案的不一致。


  形式的一致性

  保持系統架構在形式上的一致性,常常是架構師的有意為之,其目的是希望保持架構的簡單性。最能體現形式一致性的一個原則是“慣例優于配置”。這里所謂的“慣例”,可以理解為框架對實現的一些約束。我們可以根據事先制訂的默認規則,通過反射技術完成對象的創建,對象的協作,甚至是應用程序的組裝。“慣例優于配置”的關鍵,就在于它規定了形式上的一致性。以Ruby on Rails為例,通過事先確立Model、View和Controller的目錄結構與命名規范,強迫開發人員對系統進行MVC的劃分,并嚴格遵守框架制訂的規范。在程序運行時,Rails會將分離的部分組裝在一起。組裝的過程默認按照命名約定與慣例進行,在一般情況下就不需要任何外部的元數據配置信息。下圖是Rails的MVC架構:

  當客戶端向服務端發出請求后,Dispatcher會對請求的url進行解析,并判斷應該將請求發送到應用程序的哪個部分,以及如何解析這一請求。在尋找到正確的controller與action之后,就可以通過該action來處理請求。action可以查閱請求中攜帶的數據,可以與模型交互,也可以調用別的action。最后,action會為視圖準備充分的信息,視圖則將所需的信息展現給用戶。因為在形式上能夠保持一致性,框架就變得簡單,參與的各個組件能夠做到各司其職,職責清晰,意圖明確。

  這種形式的一致性基于一種樸素的思想,就是有限的約束比完全的開放更容易實施和遵循。正如社會總要有一套被人廣泛認同的規則,來約束每位公民的行為,否則整個世界就會亂了套。形式一致性的本質在于概念的完整性,而它的基礎則在于約定。架構的復雜性在于我們無法為混沌的系統做出正確的決策,如果能夠為我們所要解決的場景抽象出整體的概念,就能夠最大程度地對模型進行簡化,從而給出一致性的約定。Rails利用現有的MVC模式,通過約定與慣例在形式上的一致性,實現了Web架構的簡化。如果我們觀察Maven的目錄結構,就會發現Maven在針對依賴管理這樣一個場景,同樣提出了自己的概念模型,并在形式上規定了架構的一致性:

  簡潔的架構常常能體現一種獨到的美,而具有一致性的架構則會給軟件系統帶來和諧與平衡。架構風格的一致可以保證系統架構的統一,設計人員只要抓住了架構的風格特征,就能夠把握這個系統的“神”,從而促進對系統架構的理解。對架構風格的重視,還有利于架構級別的資源重用,通過對問題域的分析,判斷它應該屬于哪一種架構風格的分類,就能夠找到適合架構的原則、模式或現有的平臺和框架。解決方案的一致性可以避免混亂的軟件架構,促進團隊成員之間的交流與協作,規避因為解決方案不一致而導致的資源浪費。保持一致的解決方案還可以保障軟件質量,因為很多潛在的隱患與缺陷,恰恰都是因為不同的解決方案帶來的沖突導致的。形式的一致是簡化的前提,并能夠保證系統概念的統一,通過抽象簡化概念模型,并制訂一致的架構約定,就能夠簡化整個架構體系,降低實現的難度。

posted on 2011-12-20 21:37 coreBugZJ 閱讀(325) 評論(0)  編輯 收藏 引用 所屬分類: Software

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久亚洲国产美女国产盗摄| 伊人夜夜躁av伊人久久| 欧美亚洲一区在线| 亚洲在线视频免费观看| 亚洲欧美大片| 久久久久久久波多野高潮日日| 久久riav二区三区| 久久久久成人精品免费播放动漫| 久久人人爽爽爽人久久久| 欧美成人嫩草网站| 国产精品都在这里| 国产亚洲精品bt天堂精选| 影音先锋欧美精品| 国内成+人亚洲| 久久久噜噜噜久久人人看| 久久偷窥视频| 欧美日韩激情小视频| 国产精品人成在线观看免费| 国产乱子伦一区二区三区国色天香| 国产亚洲欧美日韩精品| 亚洲人成在线播放网站岛国| 亚洲线精品一区二区三区八戒| 香蕉久久夜色精品国产| 女仆av观看一区| 亚洲夜间福利| 免费看av成人| 国产乱码精品| 日韩视频免费| 玖玖玖国产精品| 中文在线资源观看网站视频免费不卡 | 噜噜噜躁狠狠躁狠狠精品视频| 亚洲大片免费看| 国产精品99久久久久久久vr| 久久亚洲综合| 国产区欧美区日韩区| 99这里有精品| 欧美a一区二区| 亚洲欧美卡通另类91av| 欧美日韩高清一区| 91久久中文| 噜噜噜噜噜久久久久久91| 亚洲在线视频网站| 欧美日韩一二三区| 亚洲精品久久久久久下一站| 久久久精品一区二区三区| 99国产精品久久久久久久成人热| 久热综合在线亚洲精品| 国产在线视频不卡二| 性欧美8khd高清极品| 亚洲美女视频在线观看| 欧美激情中文不卡| 亚洲免费成人av| 欧美电影免费观看高清完整版| 欧美一区二区精品久久911| 国产精品欧美日韩一区二区| 亚洲影院色在线观看免费| 亚洲麻豆av| 欧美日韩国产一级| 亚洲线精品一区二区三区八戒| 亚洲高清视频一区| 欧美成在线观看| 亚洲精品久久久一区二区三区| 欧美xxx在线观看| 免费在线观看成人av| 尤物九九久久国产精品的特点| 久久久噜噜噜久久中文字免| 性欧美超级视频| 狠狠色狠狠色综合系列| 老司机精品视频网站| 久久国产精品色婷婷| 中文在线资源观看网站视频免费不卡 | 乱人伦精品视频在线观看| 亚洲综合视频在线| 国产麻豆精品视频| 久久精品女人的天堂av| 新狼窝色av性久久久久久| 国产一区二区三区在线观看视频| 久久久久免费视频| 久热精品视频在线观看一区| 91久久久久久久久| 99视频精品全部免费在线| 国产精品欧美日韩一区二区| 久久精品国产亚洲高清剧情介绍| 久久av一区二区三区漫画| 亚洲大胆在线| 日韩午夜在线视频| 国产一区二区三区黄视频| 欧美成人免费小视频| 欧美日韩精品一二三区| 久久av二区| 欧美高清影院| 欧美一区二区| 欧美成人一区在线| 欧美一区在线看| 欧美电影免费观看高清| 欧美一区二区视频观看视频| 麻豆久久婷婷| 性欧美办公室18xxxxhd| 麻豆91精品| 欧美在线高清视频| 欧美激情导航| 久久精品成人一区二区三区| 欧美成人日本| 久久免费视频网| 欧美日韩三级视频| 欧美+亚洲+精品+三区| 国产精品九九| 亚洲国产成人精品视频| 国产欧美日韩视频在线观看| 亚洲国产精品99久久久久久久久| 国产精品一区久久| 99pao成人国产永久免费视频| 黄色精品一二区| 亚洲在线成人| 中文在线一区| 欧美福利电影在线观看| 久久亚洲私人国产精品va媚药| 欧美色图一区二区三区| 亚洲国产黄色| 亚洲国产精品va在线看黑人| 欧美一级电影久久| 亚洲欧美日韩一区二区在线 | 99综合在线| 久久综合九色99| 亚洲精品美女在线| 亚洲欧美另类在线| 夜夜嗨av一区二区三区网站四季av | 亚洲高清不卡av| 欧美一区影院| 欧美资源在线观看| 国产精品久久午夜| 亚洲另类自拍| 在线亚洲美日韩| 欧美视频导航| 一区二区三区 在线观看视| 日韩一级视频免费观看在线| 欧美不卡视频| 亚洲欧洲日产国产综合网| 亚洲欧洲精品成人久久奇米网| 久久天天综合| 欧美福利电影在线观看| 亚洲国产成人久久综合一区| 久久久久久久久久久一区| 久久久综合香蕉尹人综合网| 黄色日韩网站| 免费不卡欧美自拍视频| 亚洲国产aⅴ天堂久久| 亚洲免费观看高清完整版在线观看熊 | 一级日韩一区在线观看| 欧美日韩视频在线第一区| 亚洲免费精彩视频| 午夜精品免费视频| 国产亚洲欧洲| 久久久综合网站| 亚洲黄页一区| 小辣椒精品导航| 狠狠久久亚洲欧美专区| 久久亚洲国产精品一区二区| 亚洲国产精品国自产拍av秋霞| 日韩西西人体444www| 欧美视频1区| 欧美在线免费| 亚洲高清网站| 亚洲免费网址| 精品91在线| 欧美日韩成人一区| 午夜电影亚洲| 欧美激情视频在线播放 | 欧美暴力喷水在线| 一本一本久久| 国产色视频一区| 欧美a级一区| 亚洲一区中文| 亚洲国产日韩欧美在线99| 亚洲免费视频在线观看| 在线 亚洲欧美在线综合一区| 欧美激情一区二区三区在线视频观看| 在线一区二区三区四区| 六月婷婷久久| 亚洲欧美一区二区原创| 亚洲电影下载| 国产欧美日韩精品专区| 欧美大片免费观看| 欧美精品九九99久久| 欧美亚洲免费在线| 亚洲国产片色| 国产精品亚发布| 欧美黑人多人双交| 久久国产精品高清| 99精品欧美一区二区三区综合在线| 久久久精品一区二区三区| 一区二区三区高清在线观看| 伊人婷婷久久| 国产亚洲欧美一区二区三区| 欧美日韩情趣电影| 模特精品在线| 久久久中精品2020中文| 亚洲午夜女主播在线直播| 亚洲国产欧美一区二区三区久久| 久久久999精品免费|