Eri*_*tas 12 asp.net-mvc many-to-many one-to-many fluent-nhibernate repository-pattern
我正在将存储库模式实现为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):
}
Run Code Online (Sandbox Code Playgroud)
我很清楚如何使用这样的存储库来添加,更新,删除或获取单一类型的实体.但是,您如何处理创建和操纵不同类型之间的一对多或多对多关系?
假设您有一个Item类型,其中每个项目都分配给a Category.您将如何通过存储库进行此分配?这应该取决于Update(Category c)和/或Update(Item i)方法来确定需要与正在更新的元素建立什么关系?或者应该有一个明确的AssignCategoryToItem(Item i, Category c)方法?
如果它有任何区别我正在使用Fluent NHibernate来实现我的具体存储库.
您的应用程序如何处理为项目分配类别?
可以:
让您的应用决定您选择哪种方法。
Business Logic/Services这就提出了拥有一个层并处理聚合根的想法。在我的应用程序中,我总是有一个services所有业务逻辑所在的层。我发现这样做使我的应用程序更易于理解和维护/重构。(注意:我还使用通用存储库,并将复杂的存储库查找放在适当服务类中的单独函数中)
在您的services层中,您将有一个名为的函数AssignCategoryToItem,该函数将获取类别(聚合根),然后您将向其中添加项目category并保存更改 - 尽管我更喜欢传入IDs类别的 并将其从中提取更新前的数据库。
| 归档时间: |
|
| 查看次数: |
4216 次 |
| 最近记录: |