- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在练习领域驱动设计,为什么不构建一个演示产品目录项目呢?显然 Product
是这里的核心域,但由于我想让项目更有趣,所以我很乐意支持嵌套的 Category
层次结构。换句话说,一个 Category
可以有很多子 Category
。
此外,我想将 Category
与 Product
域分开,并使其成为自己的支持域。
问题:将Category
标记为AggregateRoot 对我来说不合适。一个 Category
可以有很多子 Category
,它们也是 AggregateRoots?!!我该如何着手建模呢?嵌套产品类别在电子商务现实生活中很常见。
命名空间DL.Demo.Domain.Shared
public abstract class ValueObjectBase<T> : IEquatable<T>
where T : ValueObjectBase<T>
{
public abstract bool Equals(T other);
public abstract override bool Equals(object obj);
public abstract override int GetHashCode();
}
public abstract class EntityBase : IEquatable<EntityBase>
{
public Guid Id { get; private set; }
protected EntityBase()
{
this.Id = Guid.NewGuid();
}
// Some Object overrides
}
我实际上从 Entity
中继承了 AggregateRoot
,因为我猜只有 Entity
可能是 AggregateRoot
?
public abstract class AggregateRoot : EntityBase
{
}
命名空间DL.Demo.Domain.Catalog
public class Category : AggregateRoot
{
public string Name { get; private set; }
public Guid? ParentCategoryId { get; private set; }
public CategoryStatus CategoryStatus { get; private set; }
}
有一个嵌套的 AggregateRoot 列表对我来说听起来不合适。如果您不将 Category
标记为 AggregateRoot,您将如何对其进行建模?
我是 DDD 和所有其他相关的很酷的东西(如领域事件、事件溯源等)的新手。如果有经验的人可以告诉我我的方法是否正确,我将不胜感激。
最佳答案
I am new to DDD and all other related cool stuff like Domain Events, Event Sourcing, etc. I will be appreciated if somebody who had experience can tell me if I am going to the right way.
你走对了。
Category
应该是一个 Aggregate root
,通过其 ID 引用父类别,这非常好。
嵌套类别是事件溯源的一个很好的候选者,即使没有特殊的不变量需要保护,因为这个层次结构可以在 Read models
中投影的不同模式。尽管 Aggregate
是直截了当的,但您在该表示上没有任何限制。在每个使用的读取模型
中,您可以不同地实现它们:
See more here about implementing tree structures (此链接指向 MongoDB,但这不相关)。
Category Aggregate
只是发出简单的事件,如 ACategoryWasCreated
、ACategoryHasMovedToOtherParent
等等,Read models
只是适应以反射(reflect)这些事件。
我已经实现了这样的树结构,读取端(查询端)的查询非常非常快。您可以选择一个类别中的产品以及所有没有连接的子类别。或者您可以再次构建一个没有连接的类别路径。
关于domain-driven-design - 领域驱动设计 : how to model nested product category hierarchy? 更糟糕的是,如果产品类别是聚合根怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42544256/
我们正在创建一个 REST API,我们目前有两种定义资源的方法。 基本上我们有 Patients , Studies和 Images哪里Patient有 n Studies和一个 Study有 n
我想知道哪一种更好的方法来实现一个被设计为具有复杂 subview 层次结构的 View ,比如说一个 View ,左侧有一个 subview ,右侧有一个 subview ,左侧 subview 有
启动布局检查器时收到错误消息:“获取 View 层次结构时出错:意外错误:空 View 层次结构”。 同样在 Logcat 中有一个异常(exception): 12-10 23:46:56.812
我一直在寻找要在我工作的公司的Web开发部门中实施的Web开发人员指定层次结构。 例如:关联Web开发人员-> Web开发人员->高级Web开发人员->接下来做什么? 请建议..! 最佳答案 “Web
我明白那个: 更快 访问时间> 更多 昂贵的 较慢 访问时间> 减 昂贵的 我也明白寄存器是层次结构的顶部,并且具有最快的访问时间。我很难研究的是为什么它这么贵?据我所知,寄存器实际上是直接内置在 A
我希望有人经历过相同的过程并可以帮助我看看以下情况是否可能。 我目前构建了一个从 S3 存储桶进行复制的管道。该存储桶包含大量文件夹。 Azure 数据工厂是否有办法在从 S3 存储桶复制数据时忽略文
在我看来,定义 static namedQueries = {} 在层次结构的子类中完全屏蔽了父类(super class)的 namedQueries 声明。有没有办法让两者都工作?说使用 supe
我希望有人经历过相同的过程并可以帮助我看看以下情况是否可能。 我目前构建了一个从 S3 存储桶进行复制的管道。该存储桶包含大量文件夹。 Azure 数据工厂是否有办法在从 S3 存储桶复制数据时忽略文
我遇到了以下嵌套数组,并且对它为什么使用这种特定语法有点困惑: var allQuestions = [{ question: "Which company first implemented
在过去的一个月里,我一直在构建一个 Drupal 8 站点,它应该有一个类似于这样的愚蠢的简单页面层次结构: Parent Page --Child Page --Child Page ----Gra
我正在寻求理解 Delphi 7 中其他人的代码(我怀疑较新的版本内置了此代码,但我不想为最新版本花费 > 1000 美元)。 他们有(最好是FOSS)工具可以帮助我生成类层次结构图吗? 其实就是G
我目前有这两个实体:名义上的和熟悉的(家庭/亲属/亲戚)。 熟悉的 [0..*][1] 标题 这两个类具有一个人的共同属性(名字,姓氏,出生日期......),并且它们是两种附属 我想将它们统一在一个
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
是否可以通过层次结构 id 对层次结构中的 sql 数据进行排序,然后对于每个级别排序它按字母顺序说? 假设我们有一个员工表,它根据员工 ID 列出组织层次结构 你有鲍勃 (5),菲尔 (17) 和查
public class OrderEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Colu
我想知道如何编写 postgres 子查询,以便下表示例输出我需要的内容。 id parent_id postdate 1 -1 2015-03-10 2 1
我正在建立一个分类网站。你能建议我怎么做吗基于国家/地区的分区地理位置表 ??? 更新:我可以根据纬度和经度做吗? 下面是我的表结构。 CREATE TABLE IF NOT EXISTS `geo`
我正在使用 Android SDK 附带的 Hierarchy Viewer 工具进行一些测试。 我正在测试的 Activity 具有以下 xml: Sl
我已经对此进行了研究,并且知道我不是第一个提出问题的人,但我似乎无法理解它。我创建了一个简单的示例,如果有人可以提供缺失的链接,我认为它可以帮助我破解它! 我有一个区域表,其中包含层次结构中的大陆和国
我在第一个真正的 iPhone 应用程序上遇到了一些困难,想获得一些关于如何构建它的建议。我正在寻找一些关于创建 UI 组件并将它们链接在一起以创建应用程序流(以编程方式创建 View / Contr
我是一名优秀的程序员,十分优秀!