我想先用EF代码控制DDD。我看到人们首先使用EF代码,然后域类位于同一个类中。只是看一个小例子。
public class TestDBContext : DbContext
{
public TestDBContext()
: base("name=TestDBContext")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//modelBuilder.Configurations.Add(new vwCustomerConfiguration());
Database.SetInitializer<TestDBContext>(null);
}
public DbSet<Customer> Customer { get; set; }
public DbSet<Addresses> Addresses { get; set; }
public DbSet<Contacts> Contacts { get; set; }
public virtual DbSet<vwCustomer> vwCustomers { get; set; }
public DbSet<vwMyCustomers> vwMyCustomers { get; set; }
}
客户,地址,联系人和所有域类都在同一个项目中,但我想将所有这些域类放在不同的项目中。
只看到我想要实施的新项目层次结构。所有项目名称将从我的公司开始,然后执行项目名称
这里是
1)Impex.Domain
2)Impex.Storage
3)Impex.Business
4)Impex.UI
所以我将有4层,那些是域,存储,业务和UI。存储,业务和UI这3层将有Domain层的参考,因为这3层Storage,Business和UI可能会使用域类。
UI会将数据传递到业务层并从业务层接收数据。业务层将再次与存储层对话,其中EF代码将首先实现与DB交互。
如果我可以在4层之后成功完成我的项目,那么人们应该考虑我的项目是否基于DDD模式?
告诉我,我正在思考正确的方式。请告诉我你的所有建议和指导。如果有人能预见到任何问题,那么请详细了解我。感谢
答案 0 :(得分:0)
您的问题似乎主要围绕您的解决方案的结构,就像我们行业中的大多数事情一旦您理解了事物的原理(在这种情况下为DDD),结构似乎可以自行解决。
我会指出一些可以帮助你的事情
1)Impex.Domain
作为一个糟糕的例子,做一些像
这样的事情employee.takeLeave(days)
而不是
employee.daysOff = days;
即。应该在实体内部捕获修改实体的状态。
2)Impex.Storage
像
这样的东西modelBuilder.Entity<Employee>().HasKey(t => t.EmployeeID);
3)Impex.Business&amp; Impex.UI
business
图层是没有意义的,而这个图层的内容是Application
或Service
图层,在这里您可以加载实体或聚合并调用要完成的工作。最后一点:
DDD没有规定架构!这是一套指导您的原则,但只要您遵守DDD的租户,您就可以实现您喜欢的1层,3层,CQRS或任何其他架构模式。
祝你好运。