仅公开来自 DBContext 的聚合根
Exposing only aggregate roots from a DBContext
我是 DDD 的新手。在我们的 DDD 项目中,我们有一个要求,我们的 DBContext 应该只暴露 AggregateRoots.. 假设我们的 DbContext 如下所示
public class ClassContext : DbContext
{
public DbSet<Class> Classes{ get; set; }
public DbSet<Students> Students{ get; set; }
}
和Class是聚合根。下面的实现方式对吗
public class ClassContext : DbContext
{
public DbSet<Class> Classes{ get; set; }
private DbSet<Students> Students{ get; set; }
}
如有任何意见,我们将不胜感激
我认为学生不需要私人声明。
大概 Class 对象包含类似
的东西
public virtual List<Student> Students { get; set; }
因此,考虑到您只公开聚合根的要求,您查找学生的代码将始终需要找到 class 并从中拉出学生。
考虑应用程序中的聚合根当然很有用,但不要尝试将 DDD 概念应用于 Entity Framework class 模型。
Entity Frameworkclass 模型不是领域模型。它是一个数据访问层。任何关于包含或隐藏实体 and/or 导航属性的考虑都应该以促进流畅的数据访问为动机,仅此而已。
您不太可能总是让 read/create/update/delete 学生通过 classes。那会产生不必要的笨重代码。谁说学生永远在class?
但这也许不是聚合的最佳示例。 Student
与 Class
没有 身份关系 ,因为下一次他会在另一个 class 中。它与 classic Order-OrderLine
关系不同。我可以想象在那种情况下你可能只会暴露一个 DbSet<Order>
.
所以只需将 DbSet<Students>
公开为 public class。
我是 DDD 的新手。在我们的 DDD 项目中,我们有一个要求,我们的 DBContext 应该只暴露 AggregateRoots.. 假设我们的 DbContext 如下所示
public class ClassContext : DbContext
{
public DbSet<Class> Classes{ get; set; }
public DbSet<Students> Students{ get; set; }
}
和Class是聚合根。下面的实现方式对吗
public class ClassContext : DbContext
{
public DbSet<Class> Classes{ get; set; }
private DbSet<Students> Students{ get; set; }
}
如有任何意见,我们将不胜感激
我认为学生不需要私人声明。 大概 Class 对象包含类似
的东西 public virtual List<Student> Students { get; set; }
因此,考虑到您只公开聚合根的要求,您查找学生的代码将始终需要找到 class 并从中拉出学生。
考虑应用程序中的聚合根当然很有用,但不要尝试将 DDD 概念应用于 Entity Framework class 模型。
Entity Frameworkclass 模型不是领域模型。它是一个数据访问层。任何关于包含或隐藏实体 and/or 导航属性的考虑都应该以促进流畅的数据访问为动机,仅此而已。
您不太可能总是让 read/create/update/delete 学生通过 classes。那会产生不必要的笨重代码。谁说学生永远在class?
但这也许不是聚合的最佳示例。 Student
与 Class
没有 身份关系 ,因为下一次他会在另一个 class 中。它与 classic Order-OrderLine
关系不同。我可以想象在那种情况下你可能只会暴露一个 DbSet<Order>
.
所以只需将 DbSet<Students>
公开为 public class。