0

我正在使用C#,.NET Framework 4.0和Entity Framework Code First開發軟件(庫,網頁,Web API,桌面應用程序等)。有什麼可做的模型類的依賴注入?

爲了開發這個軟件,我使用了Ninject的依賴注入和模式Generic Repository和Unit of Work。

這是我第一次使用這些模式,我認爲使用Ninject我會解決耦合問題。

現在,我改進了我的數據庫,並且改變了模型。數據庫具有與前一個相同的功能,但具有較少的表和較少的列。要做到這一點,我已經改變了我的E.F.的POCO課程,這裏出現了我所有的問題。這些問題是因爲我在業務邏輯中使用這些POCO類,如果我改變它們,我必須改變業務邏輯。

我認爲使用依賴注入我會隔離業務層的數據層,但事實並非如此。如果改變我的數據層,我不得不改變業務層,我將兩者都耦合起來。

這總是會發生還是我做錯了什麼?

+0

_「...這裏出現我所有的問題」_ - 你遇到什麼問題?你能提供具體的例子嗎? –

+0

這些問題是因爲我在業務邏輯中使用這些POCO類,如果我改變它們,我必須更改業務邏輯。 – VansFannel

回答

0

依賴注入允許您替換合同的其他實現,通常通過接口。該合同由類型和方法組成,因此如果兩者中的任何一個發生更改,您都有新的合同。你的POCO是其中的一部分,所以不得不期望改變它們會產生返工。

如果你將實體框架之外的模型類分開並使用它們,你將會得到更好的分離,但是會有更多的類型轉換。

+0

我同意你的觀點。這一點是使用EF時最常見的錯誤。 EF的要點是將您的域對象映射到您的數據庫。實體框架應該是將靈活的數據庫與理想化的域模型相結合的靈活點。 Ergo,重新加工EF就是要點,將您的域對象與數據庫的更改隔離開來。 – Aron

+0

如果您正在使用EF來定義您的模型類,那麼在您重新編碼時仍然會有變化的定義。但問題在於注射?雖然您可以在界面合約中使用這些對象,但如果對象定義發生更改,則永遠不會返工。你或許可以將模型類與基本功能進行接口,但是你想要的靈活性水平,任何解決方案都會將這種負擔轉移。我很想知道別人有什麼要說的,對不起,我想不出另一種解決方案。 – kidshaw

+0

如果您使用EF來定義您的模型類,那麼您不使用POCO。 – Aron