Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 存储库模式混乱_Design Patterns_Repository Pattern - Fatal编程技术网

Design patterns 存储库模式混乱

Design patterns 存储库模式混乱,design-patterns,repository-pattern,Design Patterns,Repository Pattern,在存储库中保存数据时,我希望从参考数据存储库中获取数据以设置一些属性 问题是一个存储库是否应该知道另一个存储库? 我正在使用依赖项注入来设置参考数据存储库,我应该在存储库中设置存储库吗?可以,DI只是声明一个对象依赖于另一个对象,但不负责实例化依赖项 但是,我会将读repo注入写repo。读和写就是这样。获取对象并保存该对象。仍然有责任实际更改对象。这将发生在另一个组件中。就像控制器操作或服务外观。我认为存储库不应该相互了解。此附加行为属于您的服务或业务层 存储库模式是将数据访问层与业务层分离,

在存储库中保存数据时,我希望从参考数据存储库中获取数据以设置一些属性

问题是一个存储库是否应该知道另一个存储库?
我正在使用依赖项注入来设置参考数据存储库,我应该在存储库中设置存储库吗?

可以,DI只是声明一个对象依赖于另一个对象,但不负责实例化依赖项


但是,我会将读repo注入写repo。读和写就是这样。获取对象并保存该对象。仍然有责任实际更改对象。这将发生在另一个组件中。就像控制器操作或服务外观。

我认为存储库不应该相互了解。此附加行为属于您的服务或业务层

存储库模式是将数据访问层与业务层分离,通过耦合不同的存储库,您可以让业务逻辑滑入数据层,这与使用此设计模式的最初目的背道而驰


顺便说一句,将改变数据的方法与读取数据的方法分开是一种很好的做法。

所描述的存储库模式是关于逻辑和数据的封装 如何将检索数据并将其映射到实体模型的逻辑与 作用于模型的业务逻辑

不需要混淆不同的逻辑,每个存储库封装一个逻辑

但是如果你需要类似的东西,你可以编写一个RepositoryManager类,
它处理不同存储库之间的纠缠。

我为特定上下文保留单独的存储库。虽然查询存储库只是读取,但它通常为UI服务。写存储库也有一些读取,但也有为域服务的读取

public class CarRepository:IC
{ 
    public IRD ReferenceDataRepositry{get;set;}
    public string SaveCar(Car car)
    {
        //get data from reference data repository
    }
}

public class ReferenceDataRepository:IRD
{
   public string Get(string id)
   {

    }

}
在这里可以看到DomainRepository如何同时具有读取和写入功能。原则上,如果另一个存储库有不同的用途,我不会重用它

事件,如果某个方法将是重复的,那么我将其设置为内部和静态,传递它所需的所有参数,但我不会再注入另一个repo。在95%的情况下,如果每个存储库都有明确的职责并且只服务于一个上下文,则可能不需要这样做

这也意味着不要使用通用存储库。根据层/上下文需要设计每个repo,不要落入“我应该尽可能多地重复使用”的陷阱。在这种情况下,重用是好的,但很棘手

public interface DomainRepository
{
 Entity Get(int id);
 bool VerifySomeAspect();
 Save(Entity data);
}