我在Project#1中有一個ecomm應用程序。插件設計,有循環依賴問題
我在Project#2中引用了Project#1的支付網關實現。它引用了接口,以便將網關實施到合同。
現在我需要在Project#1中實際使用Project#2中的實現。
有一個循環依賴關係,所以它不工作。
我該怎麼辦?我應該將接口分解成他們自己的項目嗎?這似乎是最簡單的方法。
問題是,如果我需要創建網關的另一個實現,它可以很容易地合併到項目#1。
我在Project#1中有一個ecomm應用程序。插件設計,有循環依賴問題
我在Project#2中引用了Project#1的支付網關實現。它引用了接口,以便將網關實施到合同。
現在我需要在Project#1中實際使用Project#2中的實現。
有一個循環依賴關係,所以它不工作。
我該怎麼辦?我應該將接口分解成他們自己的項目嗎?這似乎是最簡單的方法。
問題是,如果我需要創建網關的另一個實現,它可以很容易地合併到項目#1。
將接口放入單獨的庫中通常是一個好主意。它還確保您可以改變和部署獨立於彼此的具體實現。
作爲一般經驗法則,當我設計時,首先將接口與消費者放在一起,然後在需要時將它們移動到單獨的庫中。
據我瞭解你的描述,你在每個庫中都有消費者,所以移動它們聽起來像是正確的方法。
如果你發現,這些接口是足夠無關,你甚至可能要考慮把他們兩個不同的庫。
是的。您應該將插件應該實現的接口(以及任何潛在的通用幫助代碼)放在單獨的程序集中。
是的,將你的接口分解爲另一個項目並從兩個項目中引用該項目。這樣,兩者都取決於抽象。
這是你的另一個問題,但它至少有更多的細節。
如果項目2是項目1的插件,那麼項目1在任何情況下都不應該與項目2有任何依賴關係。期。
通過反射/ MEF /等將Project 2的程序集加載到Project 1中。
難道你不只是在這裏以不同的方式提出這個問題 - > http://stackoverflow.com/questions/2052579/circular-dependancies/2052632#2052632 – 2010-01-12 21:49:40
mrblah不重視你的時間。 -1爲mrblah。事實上,姆布拉甚至沒有注意到他以前的問題。如果姆布拉的頭腦冒出一個問號,姆布拉就在這裏問這個問題。 mrblah不使用谷歌,也沒有javadoc,也沒有任何這些。如果你願意,姆布拉想要你的時間。 – 2010-01-22 01:32:04