我正在尝试构建一个Repository + UnitOfWork平台。我的IRepository接口如下所示。代码优先 - 存储库模式 - 设计注意事项
public interface IRepository<TEntity>
where TEntity : IEntity
{
IQueryable<TEntity> GetAll();
TEntity Get(int id);
IQueryable<TEntity> FindBy(Expression<Func<TEntity, bool>> predicate);
TEntity Add(TEntity entity);
TEntity Delete(TEntity entity);
void Save(TEntity entity);
}
我感到困惑的一些问题如下...
- 的IEntity这是在接口处理的代码第一实体(未业务对象)。理想情况下,仓库是否可以处理(接受+返回)它们或业务对象本身?
- 储存库应该返回IQueryable还是IEnumerable?
- 如果问题#1的答案是业务对象,那么如何 实现实体和业务对象之间的映射?
- 如果我引入一个新的服务层(将由客户端使用 ),服务层将是调用Repository方法和映射的一次。它是否正确?
- 如果对上述问题的回答是肯定的,那么在 服务层进行映射会破坏单一责任原则。如何获得 ?
我也欢迎一个示例应用程序(MVC,EF,SQL Server)的链接,其中实现了Repository和UnitOfWork。