很想寫相關(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è)模塊更新了,其他的模塊不必做額外的修改。

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式