很想寫相關(guān)的內(nèi)容,一直以來這方面的東西很雜,自己各方面都多多少少有些總結(jié),但是沒有系統(tǒng)的成文,始終覺得是個遺憾。
這是這個系列的第一篇。
本文說的架構(gòu),還并不是說的Tier層的架構(gòu),這里面不會涉及到分布式、緩存、網(wǎng)絡(luò)結(jié)構(gòu)等等的布局,而是集中在軟件的內(nèi)部,是代碼層級的,考慮這點架構(gòu)的點,目的是在于幫助我們寫出清晰、易維護的軟件。
關(guān)注點分離(Separation of concerns, SoC)
這個準(zhǔn)則應(yīng)該作為我們開發(fā)和架構(gòu)的指導(dǎo)性的原則。在該原則下,軟件應(yīng)該按照其業(yè)務(wù)來將軟件本身劃分成不同的部分,從而進一步降低耦合性,不過,這感覺是句廢話,大家好像都懂。
那么首先,關(guān)注點是什么呢?
比如說一組對代碼有影響的業(yè)務(wù)邏輯,或?qū)δ硞€具體業(yè)務(wù)有影響的業(yè)務(wù)規(guī)則。它其實可以很通用,比如針對x86環(huán)境優(yōu)化代碼的細節(jié);也可以很具體,比如某個將要初始化的類的名字,只要它對我們是有用的,我們就稱它為其中的一個關(guān)注點。
舉例來說,如果某個軟件有個邏輯:是將某些產(chǎn)品高亮顯示出來,以顯示這些產(chǎn)品的獨特性。
那么,把這些產(chǎn)品挑選出來的邏輯,應(yīng)該和把這些產(chǎn)品做高亮的邏輯分離開來,這是兩個不同的關(guān)注點(只是剛好這兩個關(guān)注點是互相關(guān)聯(lián)的而已)。
在架構(gòu)上,如何去應(yīng)用這條準(zhǔn)則呢?比如說,把業(yè)務(wù)邏輯的行為分成基本的實現(xiàn)層(infrastruture)和UI層(理想的情況下,業(yè)務(wù)規(guī)則和業(yè)務(wù)邏輯都應(yīng)該分離到不同的項目里面去,他們也不能互相產(chǎn)生依賴的關(guān)系)。這種結(jié)構(gòu)能幫助我們保證業(yè)務(wù)邏輯更容易的測試和應(yīng)用,而且在底層也沒有互相耦合在一起。
關(guān)注點分離是我們對于軟件分層的一個核心的考慮點。
把握好這個尺度,有助于我們建造模塊化的應(yīng)用程序。它的價值在于簡化開發(fā)和提高維護性。這個準(zhǔn)則做好了,各獨立部分就能重用,也可以相對獨立的開發(fā)和更新,某個模塊更新了,其他的模塊不必做額外的修改。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26