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