- 在實際應(yīng)用中,其實不存在一個本質(zhì)上完全好的架構(gòu)或者本質(zhì)上完全糟糕的架構(gòu)庙楚,各種架構(gòu)總能夠或多或少的滿足某些系統(tǒng)的要求上荡。
- 可能對于一些企業(yè)或者項目來說,這樣的架構(gòu)是很好的馒闷,但對于另一個項目來說鸦致,可能就完全不適用藏畅,比如對一次使用的臨時系統(tǒng)來說,使用具有很好的可修改性的架構(gòu)沒有任何意義。
- 根據(jù)不同系統(tǒng)的不同目標(biāo)看疗,我們可以對架構(gòu)進行評估总珠,這是我們關(guān)心架構(gòu)的原因之一领铐。
- 這就需要在設(shè)計架構(gòu)的過程中遵循某些實踐準(zhǔn)則特石,當(dāng)然忽視某一條準(zhǔn)則啤呼,并不意味著整個架構(gòu)都是完全失敗的。至少可以把這些準(zhǔn)則作為你評判架構(gòu)標(biāo)準(zhǔn)呢袱,更好的對你的架構(gòu)進行分析官扣。
- 我們把經(jīng)驗分為兩類,關(guān)于過程的建議和關(guān)于產(chǎn)品(或結(jié)構(gòu))的建議
Process recommendations
- 通常只是選擇用一個架構(gòu)師或者由一個明確指定的技術(shù)總監(jiān)領(lǐng)導(dǎo)的一個小的架構(gòu)師團隊來實現(xiàn)某個架構(gòu)产捞,這樣保證架構(gòu)概念的完整性和技術(shù)的連貫性醇锚,同時架構(gòu)師和開發(fā)團隊之間應(yīng)該有緊密的聯(lián)系,確保架構(gòu)不會出現(xiàn)某些不可能實現(xiàn)的象牙塔設(shè)計坯临。
- 架構(gòu)師在設(shè)計過程中應(yīng)該有一份劃分了質(zhì)量屬性優(yōu)先級的質(zhì)量屬性列表焊唬,這就意味著折衷和權(quán)衡。(功能性就沒有質(zhì)量屬性那么重要)
- 架構(gòu)應(yīng)該使用視圖的方式記錄下來看靠,這些視圖應(yīng)該將項目生命周期中重要干系人的關(guān)注點都記錄下來也就是說赶促,一開始只是有少量的文檔,后面慢慢進行詳細描述挟炬,這些關(guān)注點通常涉及到系統(tǒng)的創(chuàng)建鸥滨,分析和維護,還有為新的干系人進行系統(tǒng)的介紹谤祖。
- 在系統(tǒng)開發(fā)初期婿滓,應(yīng)該時常測試和評估架構(gòu),檢測它是否在圍繞系統(tǒng)的重要質(zhì)量屬性實現(xiàn)粥喜,這樣可以保證所有所有對架構(gòu)的改變都不會違背設(shè)計的初衷凸主。
- 架構(gòu)的設(shè)計實現(xiàn)應(yīng)該是一個迭代增量的過程,而不是在一開始就集成所有的功能點额湘,系統(tǒng)的骨架圖可以很好的解決這個問題卿吐,系統(tǒng)骨架圖就是一開始只完善了模塊和模塊之間的聯(lián)系,而不是過多的設(shè)計功能锋华,在之后的系統(tǒng)開發(fā)過程中嗡官,以這個骨架圖作為基礎(chǔ),逐步增加功能進行有必要的完善毯焕。
Product Recommendations
- 架構(gòu)最終應(yīng)該是由不同的模塊組成衍腥,這些模塊隱藏內(nèi)部的功能實現(xiàn),只對外提供接口纳猫,這樣每一個模塊內(nèi)部的改變不會影響所有使用該模塊接口的模塊紧阔,這也就是封裝。
- 除非系統(tǒng)的需求是史無前例的续担,要不系統(tǒng)的質(zhì)量屬性應(yīng)該遵循那些已經(jīng)存在的經(jīng)典的架構(gòu)模式和策略來定義。
- 架構(gòu)最終不應(yīng)該依賴于某個開發(fā)工具或者產(chǎn)品的某個版本實現(xiàn)活孩,如果依賴是必須的物遇,那么該架構(gòu)至少應(yīng)該保證在所依賴的產(chǎn)品的版本變更后,能夠方便經(jīng)濟的適應(yīng)。
- 產(chǎn)生數(shù)據(jù)的模塊應(yīng)該和使用數(shù)據(jù)的模塊分開询兴,這樣可以提高可修改性乃沙,因為改變只是被限制在產(chǎn)生數(shù)據(jù)或者是消費數(shù)據(jù)階段,有點像產(chǎn)生數(shù)據(jù)和消費數(shù)據(jù)對外只是提供自己的接口诗舰,對于它們內(nèi)部是怎么產(chǎn)生和消費數(shù)據(jù)的是隱藏的警儒。當(dāng)要增加一個數(shù)據(jù)的時候,兩個階段可以同時進行改變眶根,而不是需要系統(tǒng)逐步的進行升級蜀铲。
- 模塊和組件之間一對一的映射是不可能發(fā)生的,在支持并發(fā)的系統(tǒng)中属百,可能就有很多實現(xiàn)同一個模塊的組件實例并行執(zhí)行记劝。
- 每一個進程的編寫都要考慮到與特定處理器之間的關(guān)系,這樣方便對分配進行變更族扰。
- 架構(gòu)應(yīng)該采用少量的厌丑,簡單的交互模式,也就是說渔呵,系統(tǒng)的功能應(yīng)保持一致怒竿,這樣可以提高系統(tǒng)的可理解性,可修改性扩氢,可靠性耕驰,并減少開發(fā)時間。
- 對于可能發(fā)生的資源爭奪类茂,架構(gòu)中應(yīng)該包括一個對資源的明確分配部分耍属,即對一些使用到的資源進行合理有效的分配。比如巩检,如果對網(wǎng)絡(luò)的利用是我們關(guān)心的一部分厚骗,那么架構(gòu)師應(yīng)該具體對每一個開發(fā)團隊進行限制,把網(wǎng)絡(luò)擁塞降到最低兢哭;如果性能是我們關(guān)心的部分领舰,那么架構(gòu)師就應(yīng)該對主要線程的時間開銷做一些限制。