我正在实施存储库模式作为ASP.NET MVC网站的一部分。我见过的大多数示例都非常简单。例如,这是一个典型的抽象存储库接口。如何处理与存储库模式的表关系?
public interface IRepository<TEntity>
{
IQueryable<TEntity> All();
TEntity FindBy(int id);
TEntity FindBy(Expression<Func<TEntity, bool>> expression);
IQueryable<TEntity> FilterBy(Expression<Func<TEntity, bool>> expression);
bool Add(TEntity entity);
bool Update(TEntity entity);
bool Delete(TEntity entity):
}
我很清楚你将如何使用这样的存储库来添加,更新,删除或获取单一类型的实体。但是,您如何处理创建和操作不同类型之间的一对多或多对多关系?
假设您有一个Item
类型,其中每个项目被分配到一个Category
。你将如何通过存储库完成这项任务?这应该由Update(Category c)
和/或Update(Item i)
方法来确定需要更新元素之间的关系吗?或者应该有一个明确的AssignCategoryToItem(Item i, Category c)
方法?
如果它有什么区别我使用流利NHibernate来实现我的具体存储库。
好吧我认为这是有道理的。我不确定的一件事情是“服务”类中的逻辑与我实际模型类中的逻辑会发生什么? – 2011-05-18 19:04:33
让您的模型类只代表模型/应用程序对象。不要把逻辑放在它们中 - 保持简单。让您的服务类负责繁重的工作 - 即数据库调用,复杂的业务逻辑/验证。让模型成为用于将信息从存储库/数据库传输到服务层并返回的对象。 – Omar 2011-05-18 19:10:23