談架構中介面的定義

zzxsky1986發表於2010-04-27
不知道有沒有朋友在專案一開始設計的時候會有一種迷茫感,不知道從何處下手,也許大家都知道好的設計需要先定義介面,往往是從一個很高的層次上去審視一套系統,這種做法我並不反對,但是我感覺這樣做似乎需要很高的水平,很多設計者在定義完自己的介面以後都會有一種定義了和沒有定義感覺一樣,還不如直接寫類來的實在呢,為什麼會這樣呢?原因很簡單,缺乏設計經驗,自己雖然站在很高的層次去思考,但是細節往往忽略了很多,甚至壓根就沒有考慮過細節,所以定義出來的介面要不就是太過抽象以至於實現的時候不容易實現,和EJB的設計初衷犯了同一種錯誤,也許壓根就沒有抽象,這樣就和沒有定義介面一樣,不能夠很清楚的定義系統的邊界,在以後的開發中常常會對現有的設計進行修改,這樣就破壞了原來的設計初衷,形成一種惡性迴圈,說了一堆廢話只是為了總結一下一般的情況和找到問題的關鍵點。下面我來說一下我對專案初期設計的一些方法,拋磚引玉,希望更多的人能夠分享一下自己的經驗,同時希望能夠分享一下自己在實際當中是如何去做的。
我認為軟體設計其實不能離開細節,但是也不能過多的去深究細節,那麼我說的細節到底細到何種程度呢?我自己的做法是細到類的方法上,開始在設計介面的時候不要過於從高階去設計,這樣容易忽略很多細節,太理想化了,等到實現的時候會有很多不合適的地方,也許有人會考慮可以使用介面卡模式去改變介面啊,這確實是一種方法,但是有的亡羊補牢的意思,一般只有開始沒有考慮過的介面才會用介面卡模式,如果一開始就設計為什麼不一開始就避免這種情況呢?我認為一開始設計的時候一定要多定義介面,畫出類圖來,近可能的去覆蓋系統的所有功能,細到對每一個物件模型的操作,不用多想盡管去定義,去設計,這樣肯定會有很多地方重複,好了,如果感覺定義的差不多了,感覺確實沒有什麼可以繼續定義的了,這時候可以停下來開始下一個階段了。
現在可以把筆放下,整理一下每一個介面,找其功能相同或者可以合併的方法,去抽象出一個父介面,把能夠公用的方法提出來。這樣一次一次不斷的迭代,最終你會發現越看越順眼,當然我指的介面不是interface定義的,也可以是一個類或者抽象類,也許有人會提出疑問,那這樣定出來的介面系統能夠擴充套件嗎?我的回答是在這個領域範圍內的一般可以擴充套件,超過這個領域範圍,我還是勸你設計另外一套子系統,誰規定系統擴充套件一定必須是在程式碼上擴充套件。也可是以子系統的方式來擴充套件,這樣某些子系統很多情況下也是可以複用的,舉例,Auth,cache,甚至是client與server都可以設計成一個子系統,client與server一定是需要以物件作為載體的嗎?xml難道就不行?介面這個東西很有多含義,有些只可意會,無法言傳。
以上只是我的一點經驗和想法,我很希望各位道友能夠給我提出意見,有沒有更好的方法,也希望大家能夠發表一下自己的方法。

[該貼被zzxsky1986於2010-04-27 22:46修改過]

相關文章