学习实现实体框架。我有一个通用存储库。我想实现一个业务层。我知道如何为此进行编码,但我有点不确定在哪里执行此操作。
- 我是否为每个实体创建一个业务层类?
例如,数据库有提供者、代理机构和联系人。我有一个通用存储库。我应该创建 ProviderManager、AgencyManager 和 ContactManager 吗?
- 除了业务层之外,我是否需要每个实体的显式存储库?
例如,我需要一个显式的 ProviderRepository 吗?
学习实现实体框架。我有一个通用存储库。我想实现一个业务层。我知道如何为此进行编码,但我有点不确定在哪里执行此操作。
例如,数据库有提供者、代理机构和联系人。我有一个通用存储库。我应该创建 ProviderManager、AgencyManager 和 ContactManager 吗?
例如,我需要一个显式的 ProviderRepository 吗?
我是否为每个实体创建一个业务层类?
不,这不是真的必要。业务可以使用多个存储库实体来执行业务操作。例如 CheckOutOrder 类可能包括支付、运输、库存等类型的存储库操作。它是业务层,它应该不知道持久存储是如何表示您的数据的。
解决您的第二个问题,存储库模式是您放在数据访问层上的一个抽象层(例如 ORM,如 ADO.NET/EF/NHibernate)IMO,如果您真的想使用存储库模式,请记住您正在引入一个额外的层。
您的存储库层可能如下所示:
IRespository<T>
RespositoryBase<T> : IRepository<T>
此外,如果您想保持其通用性,那也没关系。但请确保您的通用函数保留在基类中。您想要在所有存储库中重用通用代码。现在您可以为每个实体创建一个专用类。
ProviderRepository : RepositoryBase<ProviderEntity>
您还可以为每种类型的存储库引入抽象来表示实体特定的方法。
ProviderRepository : RepositoryBase<ProviderEntity>
ProviderRepository : RepositoryBase<ProviderEntity>, IProviderRepository
实际的实现可能会有所不同,但这只是一个演示,只是为了给你一个先机。您会在 Internet 上找到大量的存储库模式实现。但我建议先了解它并保持简单。
您可以使用 nuget 包 T4Scaffolding 为 EF 模型类轻松生成存储库。您可以根据以下给出的链接启动新的类项目并实现此存储库。然后在您的业务类中引用它。此存储库包括每个模型类的基本 CRUD 操作。有关更多详细信息http://thedatafarm.com/data-access/using-t4scaffolding-to-create-dbcontext-and-repository-from-domain-classes/