【问题标题】:DDD - How to design filesystem domainDDD - 如何设计文件系统域
【发布时间】:2021-05-30 13:26:54
【问题描述】:

我正在创建一个域是文件系统的系统。有目录和文档等实体。每个文档必须存在于某个目录中,并且每个目录都有一个父目录(不包括根目录)。为这个系统正确创建的聚合应该是什么样的?

class Catalog {
   private Catalog parent;
   private List<Document> documents;
   ...
}

class Document {
   private Catalog catalog;
   ...
}

从架构的角度来看,上面介绍的方法在我看来是最好的。 DDD 原则之一是必须将聚合作为一个整体进行加载和保存。 因此,所提供的示例在实践中是不可能实现的,因为它需要从数据库中加载整个文件树。

class Catalog {
   private CatalogID parent;
   private List<DocumentID> documents;
   ...
}

class Document {
   private CatalogID catalog;
   ...
}

另一种方法是仅存储 ID,而不是实体中的对象。但是,在这种情况下,我无法访问相关实体。

例如,考虑一种检查文档名称在给定目录中是否唯一的方法。

class Catalog {
   private CatalogID parent;
   private List<DocumentID> documents;
   
   public bool IsNameUnique(string name) {
      foreach (document in documents) {
        if (document.Name == name) return true; <-- docuemnt is only ID, not reference
      }
      return true;
   }
}

我无法获取文档名称,因为我只存储 ID 而不是实体引用。

我应该选择哪种方法以最好的方式解决这个问题? 提前感谢您的帮助。

【问题讨论】:

    标签: design-patterns architecture domain-driven-design


    【解决方案1】:

    除非您还需要对循环重解析点等讨厌的东西建模,a file system is a tree

    由于trees are bifunctors,您可以从数据库中加载IRoseTree&lt;int, int&gt;,然后将其映射到IRoseTree&lt;Catalog, Document&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-10
      • 2012-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-08
      • 1970-01-01
      相关资源
      最近更新 更多