我正在使用不同程序集的項目(想象一個打印機模塊,一個成像模塊等)。在這個項目中,所有的接口都是在一個Interfaces-assembly中聲明的(想象一下Interfaces.dll與接口IPrinterModule,IImagingModule等)。在哪裏聲明接口?
因爲我是牛仔編碼員;)我必須問SO社區,如果這真的是最好的實踐或如何以更好的方式完成這項工作?
我正在使用不同程序集的項目(想象一個打印機模塊,一個成像模塊等)。在這個項目中,所有的接口都是在一個Interfaces-assembly中聲明的(想象一下Interfaces.dll與接口IPrinterModule,IImagingModule等)。在哪裏聲明接口?
因爲我是牛仔編碼員;)我必須問SO社區,如果這真的是最好的實踐或如何以更好的方式完成這項工作?
我們都採用了類似的方法組裝聲明。你當然希望將接口與其當前的實現分開,因此未來可以很容易地提供不同的實現。 Martin Fowler將其描述爲Separated Interfaces模式。
如果接口彼此依賴(IPrinter是否返回IImageXXX?),那麼您確實需要它們在同一個程序集中以避免循環構建依賴關係。
對我來說這聽起來不錯 - 有一個單獨的接口程序集是很常見的,特別是對於大量插件的系統。
您很可能正在使用這些接口在正交組件之間創建鬆散耦合的橋接(順便說一下,對您有好處)。以真正模塊化的方式完成此操作的唯一方法是爲這些接口分別安裝一個程序集,以便實現接口或引用它的每個類型實際上都使用相同的接口類型。真的,你唯一的選擇是將整個系統中的所有東西編譯成一個程序集。
如果有循環引用,那麼將所有接口保存在單獨的程序集中將會對您有所幫助。在研究工作流程的過程中,我已經閱讀了許多代碼示例(來自微軟,代碼項目和其他站點),接口在實現它的程序集中聲明。
像IPrinterModule將在實現
有可能是在另一個DLL中實現它的類...就像插件一樣。 – CSharpAtl 2009-05-19 13:50:10
與IPrinter返回對象非常好的一點。也是鏈接。 謝謝! – Inno 2009-05-19 14:43:40