是它認爲不好的做法,有一個工廠/倉庫能夠創建/看,幾個不同類型的對象(所有這些都從一個抽象基類繼承)的?我一直無法找到任何人對此進行任何說明,但我所見過的所有工廠示例似乎都有1種類型的工廠用於需要創建的每種類型的項目。使用單個工廠/倉庫創建/查找多種類型
在我的情況,我有超過150班,從ModelBase
需要從我的ViewModels動態創建的繼承。每個buisness類都有幾個服務需要依賴注入到它們的構造函數中,但我不希望我的ViewModel有權訪問這些服務。唯一的(優雅)解決方案,我能想到的是創建一個BizFactory /存儲庫,用於創建/查找,任何東西,從ModelBase
繼承。所有的模型庫類必須實現一個Save()
和Delete()
,所以它沒有必要從BizFactory辦理儲蓄...
public interface IBizFactory
{
public T GetById<T>(int id) where T:ModelBase;
public IList<T> GetAll<T>() where T:ModelBase;
public T Create<T>() where T:ModelBase;
}
public class BizFactory: IBizFactory
{
private IDataStoreFactory datafactory;
public BizFactory(IDataStoreFactory datafactory)
{
this.datafactory = datafactory;
}
...
}
在進一步的反思...
我看到的時候,唯一一次遠程看起來這是...的DbContext在這種情況下,你使用相同類型的對象(你的DbContext),甚至同一個實例,查找任何使用Set<T>()
方法的實體。
我正確地認爲,爲了防止我的ViewModel訪問我的ModelBase子類(因此我的ModelBaseFactory)依賴的服務,我必須依賴注入一個不同的'ModelBaseFactory'爲每個我的ViewModel需要的ModelBase類型? 例如,如果我的視圖模型需要同時創建'Individual's和'Badge's,我的視圖模型將有一個構造函數,它看起來像'MyViewModel(ModelBaseFactory indFactory,ModelBaseFactory badgeFactory,...。)' –
NuclearProgrammer
此外,這將是確定有1個執行'IBizFactory'使用反射創建T'的'/查找實例。我寧願避免必須定義從IBizFactory ,IBizFactory 等派生的150個類。 –
NuclearProgrammer
不是ViewModels被動數據結構沒有行爲嗎? –