我正在学习领域驱动设计。我目前正在尝试用 C# 编写一个简单的应用程序,使用 DDD 设计它。这个应用程序有一个聚合根 A,它可以包含 0..n 个子实体 B。这可以用以下方式表示:
class A {
public int Id { get; }
public IList<B> { get; }
}
有一个存储库:
class ARepository {
public A Get(int id) { ... }
public void SaveOrUpdate(A root) { ... }
public void Delete(A root) { ... }
}
但是,我想在为给定的 A 实例呈现 B 子实体时添加分页。我该怎么做呢?我能想到的最好的方法是将 A 和 ARepository 更改为:
class A {
public int Id { get; }
}
class ARepository {
public A Get(int id) { ... }
public void SaveOrUpdate(A root) { ... }
public void Delete(A root) { ... }
public IList<B> GetBForA(A root, int offset, int pageSize, out int numPages) { ... }
}
当然,这会起作用,但我会失去域模型的简单性和优雅性。
如何使用存储库模式处理子实体的分页的最佳实践是什么?我不是在寻找如何使用特定的库等来处理这个问题,而是在寻找一种在“模式级别”上处理它的方法。