从多个数据库中保湿域模型

时间:2016-01-22 20:39:34

标签: c# design-patterns domain-driven-design repository-pattern

我有一个分层设计的应用程序如下。

Project.Common      // Domain models
Project.DataAccess  // Repositories, Persistence models
Project.Services
Project.Web         // Presentation Layer

Services项目使用UnitOfWork类(在DataAccess项目中定义)来查询数据库。 DataAccess中的存储库返回Common项目中定义的域模型。 UnitOfWork类使用连接枚举来连接到不同的数据库。

当我需要填充数据来自不同数据库(不同数据库服务器)的域模型时,我遇到了一个问题。我该怎么做?

似乎我必须查询单独的存储库,每个存储库返回一个域对象(不是持久性对象,因为它暴露给服务层)。然后从Services层中的简单域对象构建更复杂的域对象。这是正确的做法吗?

Services图层中的示例代码,用于查询数据库。

using (var unitOfWork = new UnitOfWork(DatabaseConnection.MyDbServer1, requireTransaction: false))
{
    var repo = RepositoryFactory.GetRepository<IMyRepository>(unitOfWork);
    IEnumerable<MyDomainObject> output = repo.GetData();
}

1 个答案:

答案 0 :(得分:2)

如果您的业务逻辑需要来自多个持久性模型(数据库)的信息,那么定义将在单个对象中包装此信息的新服务模型(在Project.Services中)将非常有意义。然后,您将在服务层中使用相应的方法,通过查询基础存储库来返回此模型。