1. 程式人生 > >架構設計的非侵入性原則

架構設計的非侵入性原則

最近常常看到JAVA社群熱鬧異常,各類框架齊齊上陣,各路神仙盡顯神通。.NET社群也不甘寂寞,高手都冒出來了,於是移植自JAVA的框架,自己獨創的框架,大而全的框架.....且不說技術上的優劣,也不比誰的效率,其實我們在專案中選擇一個框架的時候很多時候都是在考慮這個框架的適用性,因為在做專案的時候因為各種各樣的原因我們會受到各種各樣的制約而不能夠隨心所欲的構建系統,而且就算我們能夠作主的時候也會因為框架本身的限制而作罷,這點在改造和重構已有系統的時候常常會出現,所以在我們選擇一個框架或者設計一個框架的時候,適用性就很值得我們關注了。

這裡我覺得有一點需要糾正一下,很多時候有些朋友釋出了自己的東西都喜歡用XX框架什麼的,但是很多時候是有誤區的,所謂框架(Framework)指的是我們所需要我們遵守一定規則在上面進行開發的平臺,可能還需要提供一系列的SDK來幫助我們開發。比如.NET Framework,呵呵。WSS也算是一種Framework,因為我們也需要遵照他的規則在上面做二次開,再比如Eclipse或者Sharp develope,struts都算是Framework。而iBaties,Hibernate之類的都不算,這樣子的算是元件(Component),還有一類工具可以通過資料庫生成資料訪問程式碼,頁面等等的,這個應該怎麼說呢,可能應該算是程式碼生成器......


不知不覺說了很多不算廢話的廢話,那麼什麼是架構的侵入性呢?所謂侵入性就是指的這個架構設計出來的部件對系統的影響範圍,比如框架的侵入性就很高,因為在一個工程中引入一個框架,你的整個設計都必須圍繞這個框架來進行,一旦使用了,框架的可替代性幾乎為0,這樣子就是搞侵入性。元件的侵入性就比較低,比如ibaties,他可以在任何java框架下使用,甚至可以和其他ORM元件共存,你僅僅需要引入,配置,然後就可以使用了,你也可以用其他的ORM替換他,所以......這個體驗應該是很愉快的。
所以話說回來說到如果我們在設計一個通用架構的時候就應該注意到這個一個非常重要的地方,除非我們只是自己拿來用用,否則我們不應該假設我們的設計的使用者已經具備怎麼怎麼樣的環境或者是需要做什麼特殊的設計才能夠使用。

這裡打個比方,假如說我們在設計一個通用許可權管理什麼什麼的時候我們就要想好,這是一個元件,還是框架,還是一個現成系統(複用通過改改程式碼實現,其實個人覺得這種設計很低階,雖然有的這樣子的東西功能確實豐富)。確定了目標之後我們才好開始下一步,比如確定是一個框架的話可能發揮要自由一些,因為不需要高度的內聚,不過可能因為框架要設計的方方面面太多了,所以老是覺得個人的力量不足以搞這種東西出來。如果是元件的話就需要高度的內聚來實現非侵入式,比如引入DLL的時候還需要讓所有頁面繼承自某個基類頁就不算是一個good idear。
雖然話說得好聽,不過我在自己做設計的時候還是常常因為功力不夠造成一些侵入的現象,但是高內聚低耦合都是我們不斷追求的目標,所以所有做設計的同學們一起努力吧

PS:這裡賣弄了下詞藻,呵呵,侵入就是在兩個系統發生耦合的時候造成的...........

估計發首頁會被人罵,我就想看看那些人會罵而已

http://www.cnblogs.com/alexander-lee/archive/2007/01/27/631672.html