我想知道是否可以在不使用EF的情况下使用DDD,因为在我的项目中,类是具有通用继承的通用复杂类型,可能会不时变化,DB表和字段也可能不同一个客户端数据库版本到另一个客户端数据库版本,也是对数据库的查询,这些查询是根据它生成的通用对象动态构造的。
我目前正在考虑这种设计模式: Cesar de la Torre等DDD N-Layered .NET 4.0 Architecture Guide 。
提前谢谢大家。
答案 0 :(得分:3)
DDD与持久性技术无关(a.k.a EF,NHibernate)。 DDD与您的域概念更相关。使用DDD时,实现Repository Pattern以处理持久性方案很有用。您的存储库会收到您的复杂业务对象,并将其转换为更加持久性友好的版本。
示例:
interface IMyRepository {
void Save(MyComplexBussinessAgg aggregate);
}
class MyRepository: IMyRepository {
public void Save(MyComplexBussinessAgg aggregate) {
//Pseudo Code
//1.- Check valid state of MyComplexBusinessAgg
//2.- Transform to a persistence-friendly DTO
//3.- Persist
}
}
当您需要使用动态行为时,您应该考虑使用更好的方法,如EventSourcing,或将持久性技术更改为NoSql数据库提供程序,以避免将来出现问题并提升您的项目。在项目架构中接受模型的变化,项目将会成功。