0
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)
   {

    }

}

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

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

4

4 回答 4

0

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

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

于 2012-06-09T14:46:25.930 回答
0

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

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

顺便提一句。将正在更改数据的方法与正在读取它们的方法分开是一种很好的做法。

于 2012-06-09T14:50:26.120 回答
0

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

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

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

于 2012-06-09T14:51:24.453 回答
0

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

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

在此处查看 DomainRepository 如何具有读取和写入功能。作为原则,如果另一个存储库用于不同的目的,我不会重用它。

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

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

于 2012-06-13T10:46:34.037 回答