文章目錄
接觸了一些採用Linux/Unix工具的架構的應用以後,我發現我越來越喜歡鬆散的架構。即除了介面(UI),然後是演算法,最後是面向領域的工具或DSL。而Microsoft的架構大都反其道而行之,原因是:Microsoft想讓使用者用起來更傻瓜化,但是否能達到目的就不一定了。
對於資料交換的介面(Interface)層面,盡量用同通用的資料格式,如果是函數調用就用string,char,int之類的,如果是檔案就用Plain Text或者其他Human-Readable的格式。
鬆散架構的有點主要有兩個:
1,最小化關注點
2,面向領域(問題域)來解決問題
1,最小化關注點
實現最小化關注的前提是:簡單,通用資料格式,協議。在同一個時刻只解決一個問題。而這時介面,協議不能成為解決問題的累贅。還有就是適當的拆分問題,問題的拆分取決於問題域。而不是業務的解決方案域。Linux/Unix工具本身這點做的就很好,拆分的很乾淨。而這反過來就會促進問題的劃分。通過適當拆分,簡單通用資料格式,我們只解決該解決的問題——而不是因為解決方案而引入的問題,比如:資料轉換,資料轉送對象,阻抗匹配等等。
2,面向問題域解決問題
也就是採用面向領域的解決方案解決領域內的問題。採用合適的Unix工具:文本處理用Awk,Sed,Regular Expression;網路擷取用wget;尋找檔案或過濾用grep,find;自動化處理用Bash Scripting或者Ruby/Python等等。總之我們總能夠找到一個非常容易處理領域問題的語言或工具,不多不少地解決當前問題。
通過鬆散的架構,最終得到的應用看上去沒有Microsoft的巨無霸強壯,但實際上堅強無比。還有一個不那麼明顯但卻非常重要的優點是這種架構可以Evolution,隨著時間的推移這種架構容易調整成面向領域的架構,不多不少地解決架構該解決的問題,多的把他裁掉,少的把他補上。之所以可這樣是因為架構是鬆散的,不是誰一定要誰依賴於誰,不離不棄對愛情是好的,對架構來說是種災難。