很想寫(xiě)相關(guān)的內(nèi)容,一直以來(lái)這方面的東西很雜,自己各方面都多多少少有些總結(jié),但是沒(méi)有系統(tǒng)的成文,始終覺(jué)得是個(gè)遺憾。
這是這個(gè)系列的第一篇。
本文說(shuō)的架構(gòu),還并不是說(shuō)的Tier層的架構(gòu),這里面不會(huì)涉及到分布式、緩存、網(wǎng)絡(luò)結(jié)構(gòu)等等的布局,而是集中在軟件的內(nèi)部,是代碼層級(jí)的,考慮這點(diǎn)架構(gòu)的點(diǎn),目的是在于幫助我們寫(xiě)出清晰、易維護(hù)的軟件。

關(guān)注點(diǎn)分離(Separation of concerns, SoC)

這個(gè)準(zhǔn)則應(yīng)該作為我們開(kāi)發(fā)和架構(gòu)的指導(dǎo)性的原則。在該原則下,軟件應(yīng)該按照其業(yè)務(wù)來(lái)將軟件本身劃分成不同的部分,從而進(jìn)一步降低耦合性,不過(guò),這感覺(jué)是句廢話(huà),大家好像都懂。

那么首先,關(guān)注點(diǎn)是什么呢?

比如說(shuō)一組對(duì)代碼有影響的業(yè)務(wù)邏輯,或?qū)δ硞€(gè)具體業(yè)務(wù)有影響的業(yè)務(wù)規(guī)則。它其實(shí)可以很通用,比如針對(duì)x86環(huán)境優(yōu)化代碼的細(xì)節(jié);也可以很具體,比如某個(gè)將要初始化的類(lèi)的名字,只要它對(duì)我們是有用的,我們就稱(chēng)它為其中的一個(gè)關(guān)注點(diǎn)。

舉例來(lái)說(shuō),如果某個(gè)軟件有個(gè)邏輯:是將某些產(chǎn)品高亮顯示出來(lái),以顯示這些產(chǎn)品的獨(dú)特性。
那么,把這些產(chǎn)品挑選出來(lái)的邏輯,應(yīng)該和把這些產(chǎn)品做高亮的邏輯分離開(kāi)來(lái),這是兩個(gè)不同的關(guān)注點(diǎn)(只是剛好這兩個(gè)關(guān)注點(diǎn)是互相關(guān)聯(lián)的而已)。

在架構(gòu)上,如何去應(yīng)用這條準(zhǔn)則呢?比如說(shuō),把業(yè)務(wù)邏輯的行為分成基本的實(shí)現(xiàn)層(infrastruture)和UI層(理想的情況下,業(yè)務(wù)規(guī)則和業(yè)務(wù)邏輯都應(yīng)該分離到不同的項(xiàng)目里面去,他們也不能互相產(chǎn)生依賴(lài)的關(guān)系)。這種結(jié)構(gòu)能幫助我們保證業(yè)務(wù)邏輯更容易的測(cè)試和應(yīng)用,而且在底層也沒(méi)有互相耦合在一起。
關(guān)注點(diǎn)分離是我們對(duì)于軟件分層的一個(gè)核心的考慮點(diǎn)。

把握好這個(gè)尺度,有助于我們建造模塊化的應(yīng)用程序。它的價(jià)值在于簡(jiǎn)化開(kāi)發(fā)和提高維護(hù)性。這個(gè)準(zhǔn)則做好了,各獨(dú)立部分就能重用,也可以相對(duì)獨(dú)立的開(kāi)發(fā)和更新,某個(gè)模塊更新了,其他的模塊不必做額外的修改。

網(wǎng)友評(píng)論