我们有一个应用程序将其数据存储在两个不同的数据库中。在未来的某个时候,我们可能只会将我们的数据存储在一个数据库中,因此我们希望进行这种更改尽可能地痛苦。出于这个原因,我们将 DbContexts 包装在一个 MyDataContext 中,该 MyDataContext 被注入到我们的 UnitOfWork 和 Repository 类中。
class MyDataContext : IDataContext {
internal Database1Context Database1;
internal Database2Context Database2;
}
class UnitOfWork : IUnitOfWork {
MyDataContext myDataContext;
public UnitOfWork(MyDataContext myDataContext) {
this.myDataContext = myDataContext;
}
public Save() {
//todo: add transaction/commit/rollback logic
this.myDataContext.Database1.SaveChanges();
this.myDataContext.Database2.SaveChanges();
}
}
class Database1Context : DbContext {
public DbSet<Customer> Customers { get; set; }
}
class Database2Context : DbContext {
public DbSet<Customers> CustomerProfile { get; set; }
}
class CustomerRepository : ICustomerRepository {
MyDataContext myDataContext;
public CustomerRepository(MyDataContext myDataContext) {
this.myDataContext = myDataContext;
}
public GetCustomerById(int id) {
return this.myDataContext.Database1.Customers.Single(...);
}
}
我的第一个问题是,我做得对吗?我一直在做大量的阅读,但无可否认,DDD 在这一点上有点让人不知所措。
我的第二个问题是 IUnitOfWork 和 IDataContext 接口驻留在应用程序的哪一层?我知道存储库的接口存在于应用程序的核心/域层/程序集中,但不确定这两个。这两个甚至应该有接口吗?