关于表连接的存储库,接口,聚合根等

时间:2012-10-24 06:58:50

标签: entity-framework architecture repository-pattern

我正在慢慢地尝试提高我对企业应用程序开发的知识。关于最佳实践,我学习了如何创建iRepository接口的具体存储库实现,到目前为止它是有意义的。

我遇到的挑战是(当经常发生)时,我想返回来自一个结果集中两个或多个表的数据,以及如何最好地处理这个数据。

我理解识别聚合根可能是最好的方法,但是在使用特定/自定义存储库与通用存储库时,我想知道如何在接口和存储库方面进行处理。

Generic Repositories似乎是减少为每个必需实现创建单独iRepositories的必要条件的好方法,但问题是并非所有具体类都需要Generic Repository Interface中的所有方法,也就是说,有时我会需要更多,有时我需要更少。

我想知道解决这种情况的最佳做法是什么?开发人员通常是否有一个通用的存储库接口,然后为更具体的数据访问需求创建更具体的存储库接口?

我已将此项目用作最佳做法的指南: http://efmvc.codeplex.com/

1 个答案:

答案 0 :(得分:4)

通用存储库应该只包含最少量的方法。我通常会为每个聚合根创建一个特定的存储库(一个新接口和一个继承通用存储库的新类)。

类似的东西:

public interface IRepository<T>
{
    void Create(T);
    void Update(T);
    T Get(int key);
}

public interface IUserRepository : IRepository<User>
{
    User GetByUserName(string userName);
}

因此用户存储库看起来像:

public class UserRepository : Repository<User>, IUserRepository
{
     public User GetByUserName(string userName)
     {
         return DbContext.Users.FirstOrDefault(x => x.UserName == userName);
     }
}

但是最近我转向查询,就像我在这里描述的那样:http://blog.gauffin.org/2012/10/griffin-decoupled-the-queries/