我读过blog about DDD from Matt Petters
并据说我们为每个实体创建了一个存储库(接口),之后我们创建了一个RepositoryFactory,它将为存储库提供实例(声明为接口)
这是使用DDD完成项目的方式吗?
我的意思是,我看到我认为他们使用DDD的项目,但他们直接调用每个存储库,没有涉及工厂
以及
为什么我们需要创建这么多的存储库类,为什么不使用像
这样的东西public interface IRepository : IDisposable
{
T[] GetAll();
T[] GetAll(Expression<Func> filter);
T GetSingle(Expression<Func> filter);
T GetSingle(Expression<Func> filter, List<Expression<Func>> subSelectors);
void Delete(T entity);
void Add(T entity);
int SaveChanges();
}
我想这可能是违反SOLID原则或其他原因的事情?
答案 0 :(得分:6)
有很多不同的方法可以做到这一点。这样做并不是单一的“正确”方式。大多数人更喜欢每个实体的存储库,因为它允许他们以更细粒度的方式改变域服务。这绝对适合SOLID中的'S'。
对于工厂而言,只有在增加价值时才能使用它们。如果它们只是包装new
操作,它们就不会增加价值。
以下是工厂增值的一些场景: