我在網上搜尋這個概念的時候,發現在中國還很少有此類文章,外國有一本同名書籍出版,但是無緣拜讀。所以這個概念基本是我自己杜撰出來的,只是網上也有同名而已。
先說說,什麼是介面。這是個老問題,可是在設計之前,必須先將此定義清楚。 一個常見的定義是,介面就是契約。我認為這個定義非常模糊。契約是約定雙方的有一定法律或道德效應的說明。但是,第一,中國人不常定契約,所以不是很能理解其中精髓。第二,此定義還是沒有定義出介面的內容特徵,因此很多人看了這個定義,還是不理解介面。此定義可以是不合國情,不合民意。 我更傾向於將介面定義為職責(或角色、能力)。職責就是在某種情況下被賦予的權力和義務。在社會應用領域中,使用角色的概念更能深入人心。在英文中使用Role單詞。而在普遍意義下,能力大家也能接受。 讓我們打個比方。在物件導向分析中,我們分析出來一個人的對象。在其中,我們假定一個執行個體為韓小明,那麼韓小明這個對象應該實現多少個介面呢? 他在公司上班,需要編寫代碼,因此必須擁有編碼的能力。有時候還要參加設計,因此必須同時擁有設計能力。他有了家庭,必須有對家庭負責的能力。有了妻子,要有作為丈夫的能力。當然了,上面的這些能力也可以理解為角色。軟體工程師、架構師、丈夫、孩子、父親等等。 對於韓小明這樣一個人(對象),他身上同時擁有多個角色,那麼就要實現這麼多介面嗎?那就要看我們的業務領域涉及哪些了。如果我們只關心他的工作情況,那麼也只會涉及軟體工程師和架構師這兩種角色(介面)。 面向介面設計,就在這個時候開始發揮作用了。 在UML設計中,其實也涉及到了,關於介面的設計,那就是Role,只是沒有專門對Role本身進行設計,只是作為一種關係存在而已。方法都轉移到了對象上面。在一定意義上,導致介面的設計被人忽略。 重新捋一下我們在做OOA/OOD的過程,分析出對象,靜態分析出對象的屬性,動態(建模)分析出對象的方法。如果我們將介面的分析和設計過程加入其中,那麼我們的流程就變成:分析出對象,分析出屬性、分析出介面(角色、能力),分析出方法。介面這個集合處於類和方法之間,恰好是一個非常好的分析工具。 至於面向介面設計的一些原則和方法,相信又將是一篇非常精彩的文章。 在我們還沒有被一些新的概念淹沒之前,重新看看我們最基本的軟體設計,我們經常會發現一些意想不到的收穫。面向介面設計如此,其他也是如此。希望這些收穫也能對你有所協助。 原文:http://blog.csdn.net/xiammy/archive/2006/11/25/1413244.aspx附:《Interface Oriented Design》E書
http://www.oebook.com/search.asp?sort=ebook&keyword=Interface+Oriented+Design&language=en&Submit=search