我在C#WPF MVVM项目中实现了存储库服务模式的困境,我的模型中有一个大数据集。
我首先使用EntityFramework数据库创建了大约40个实体,因此我的模型非常庞大,对我来说实现40个不同的存储库没有意义,因为我使用了通用存储库服务模式。
我的存储库如下所示:
public interface IEntityRepository<T> : IDisposable where T : class
{
IQueryable<T> FindBy(Expression<Func<T, bool>> predicate);
IEnumerable<T> getEntities();
T RetrieveEntity(int entityID);
void CreateEntity(T entity);
void UpdateEntity(T entity);
void DeleteEntity(T entity);
void Save();
}
这是实现这些方法的类的签名。
public class EntityRepository<T> :
IEntityRepository<T> where T : class
{
private DbContext context;
public EntityRepository(DbContext context)
{
this.context = context;
}
.....
}
我现在的问题是,服务将如何呈现,以便我不必为模型中的每个实体实现它。 我正在寻找类似的东西,我可以通过实体的类型名称来动态创建服务。
有谁知道我的问题的解决方案? 谢谢!
答案 0 :(得分:0)
如果您的存储库类与您的物理数据库实体一对一映射,我不相信存储库模式是一个有用的层。
使用服务图层或其他类型的外观可能会更好。如果您坚持在实体框架之上的数据访问层,您也可能会使用查询模式找到成功。在此模式中,每个查询类都可以有一个参数对象,用于定义可以在模型上查询的参数。返回的数据结构更适合在业务或用户界面层中使用。然后,每个查询对象都与业务或用户界面层的某些部分相关。当您必须查询数据而不是访问单个实体时,可以使用查询模式。