来自多个数据库的水化域模型
Hydrating Domain Model from multiple databases
我有一个分层设计的应用程序如下。
Project.Common // Domain models
Project.DataAccess // Repositories, Persistence models
Project.Services
Project.Web // Presentation Layer
Services
项目使用UnitOfWork
class(在DataAccess
项目中定义)查询数据库。在 Common
项目中定义的 DataAccess
return 域模型中的存储库。
UnitOfWork
class 采用连接枚举连接不同的数据库。
当我需要填充数据来自不同数据库(不同数据库服务器)的域模型时,我遇到了一个问题。我该怎么做?
看来我必须查询单独的存储库,每个存储库 returning 一个域对象(不是持久性对象,因为它暴露给服务层)。然后在服务层从更简单的域对象构建更复杂的域对象。这是正确的做法吗?
Services
层中查询数据库的示例代码。
using (var unitOfWork = new UnitOfWork(DatabaseConnection.MyDbServer1, requireTransaction: false))
{
var repo = RepositoryFactory.GetRepository<IMyRepository>(unitOfWork);
IEnumerable<MyDomainObject> output = repo.GetData();
}
如果您的业务逻辑需要来自多个持久性模型(数据库)的信息,那么定义一个新的服务模型(在 Project.Services
中)将把这些信息包装在一个对象中将是非常有意义的。然后你会在你的服务层有一个相应的方法,它将通过查询底层存储库return这个模型。
我有一个分层设计的应用程序如下。
Project.Common // Domain models
Project.DataAccess // Repositories, Persistence models
Project.Services
Project.Web // Presentation Layer
Services
项目使用UnitOfWork
class(在DataAccess
项目中定义)查询数据库。在 Common
项目中定义的 DataAccess
return 域模型中的存储库。
UnitOfWork
class 采用连接枚举连接不同的数据库。
当我需要填充数据来自不同数据库(不同数据库服务器)的域模型时,我遇到了一个问题。我该怎么做?
看来我必须查询单独的存储库,每个存储库 returning 一个域对象(不是持久性对象,因为它暴露给服务层)。然后在服务层从更简单的域对象构建更复杂的域对象。这是正确的做法吗?
Services
层中查询数据库的示例代码。
using (var unitOfWork = new UnitOfWork(DatabaseConnection.MyDbServer1, requireTransaction: false))
{
var repo = RepositoryFactory.GetRepository<IMyRepository>(unitOfWork);
IEnumerable<MyDomainObject> output = repo.GetData();
}
如果您的业务逻辑需要来自多个持久性模型(数据库)的信息,那么定义一个新的服务模型(在 Project.Services
中)将把这些信息包装在一个对象中将是非常有意义的。然后你会在你的服务层有一个相应的方法,它将通过查询底层存储库return这个模型。