[Chatter] 只存在Interface的專案

摘要:[Chatter] 只存在Interface的專案

[Chatter] 只存在Interface的專案

切割架構的時候,如果發現某個專案,只用來存放Interface,這時要回頭檢視一下,是否設計上出了一些小問題。這種設計上的小問題大多是在BLL與DAL之間,會想說隔離一層Interface來共用。可是仔細去檢視這個共用的Interface,其實會很難界定這個Interface的職責是由誰來定義。通常最終的結果,是這個Interface的職責會是由BLL與DAL兩層的需求來做交集。

這樣設計的結果,就會變成其他系統要共用DAL的時候,如果要增加DAL的功能,就必須要去修改共用的介面,也就會連帶影響到原有的BLL。雖然這個影響不大,只是單純的多一個功能函式,不用改任何的程式碼,編譯也會通過,但是卻為既有系統引入了額外的功能相依,也就是慢慢的發出了壞味道。比較建議的是下列設計,透過這樣的架構設計,能讓DAL能夠共用卻不會有太多的牽扯,也讓BLL能夠有個相對乾淨的邊界:

  • 從共用DAL的角度去設計,DAL設計成為獨立的Context,提供各種功能來給其他Context使用。
  • 從共用BLL的角度去設計,BLL本身就是獨立的Context,這個Contex需要抽換的職責,設計為各種邊界Interface用以隔離、抽換實做。
  • 而在BLL與共用DAL之間,額外再去建立一層轉接的Layer,在這個Layer裡的Class使用共用DAL的功能來實做BLL邊界Interface。

目前經手的架構,盡量不去產出只存在Interface的專案,所謂的盡量是因為很多情景避免不了這樣的設計。例如說:在兩個Tier之間用WCF來交換訊息,這時WCF的合約就會獨立建立為一個合約專案,並且這個專案內,只存在合約Interface、以及DTO物件。但這樣的WCF合約專案,比較像是用來定義WCF框架的設定檔,設定檔當然是越乾淨越好,這跟先前討論的情景又有一些些的不同。套句小朱說的:「實際設計架構的時候,還是要因時因地看狀況來設計。」 :D

期許自己
能以更簡潔的文字與程式碼,傳達出程式設計背後的精神。
真正做到「以形寫神」的境界。