是它认为不好的做法,有一个工厂/仓库能够创建/看,几个不同类型的对象(所有这些都从一个抽象基类继承)的?我一直无法找到任何人对此进行任何说明,但我所见过的所有工厂示例似乎都有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被动数据结构没有行为吗? –