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

延伸閱讀

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