2010-01-12 50 views
1

我在Project#1中有一個ecomm應用程序。插件設計,有循環依賴問題

我在Project#2中引用了Project#1的支付網關實現。它引用了接口,以便將網關實施到合同。

現在我需要在Project#1中實際使用Project#2中的實現。

有一個循環依賴關係,所以它不工作。

我該怎麼辦?我應該將接口分解成他們自己的項目嗎?這似乎是最簡單的方法。

問題是,如果我需要創建網關的另一個實現,它可以很容易地合併到項目#1。

+0

難道你不只是在這裏以不同的方式提出這個問題 - > http://stackoverflow.com/questions/2052579/circular-dependancies/2052632#2052632 – 2010-01-12 21:49:40

+1

mrblah不重視你的時間。 -1爲mrblah。事實上,姆布拉甚至沒有注意到他以前的問題。如果姆布拉的頭腦冒出一個問號,姆布拉就在這裏問這個問題。 mrblah不使用谷歌,也沒有javadoc,也沒有任何這些。如果你願意,姆布拉想要你的時間。 – 2010-01-22 01:32:04

回答

1

將接口放入單獨的庫中通常是一個好主意。它還確保您可以改變和部署獨立於彼此的具體實現。

作爲一般經驗法則,當我設計時,首先將接口與消費者放在一起,然後在需要時將它們移動到單獨的庫中。

據我瞭解你的描述,你在每個庫中都有消費者,所以移動它們聽起來像是正確的方法。

如果你發現,這些接口是足夠無關,你甚至可能要考慮把他們兩個不同的庫

+0

你會用什麼作爲接口的命名空間? – mrblah 2010-01-12 22:33:23

+0

啊,現在我需要在我的界面項目sheesh中引用枚舉! – mrblah 2010-01-12 22:38:34

+1

命名空間:在許多情況下,你可以說接口代表真正的模型(其餘的只是實現細節),所以你可能要相應地命名它。 – 2010-01-12 23:06:53

0

是的。您應該將插件應該實現的接口(以及任何潛在的通用幫助代碼)放在單獨的程序集中。

0

是的,將你的接口分解爲另一個項目並從兩個項目中引用該項目。這樣,兩者都取決於抽象。

0

這是你的另一個問題,但它至少有更多的細節。

如果項目2是項目1的插件,那麼項目1在任何情況下都不應該與項目2有任何依賴關係。期。

通過反射/ MEF /等將Project 2的程序集加載到Project 1中。