使用 DDD 映射用户、地址、国家/地区
Posted
技术标签:
【中文标题】使用 DDD 映射用户、地址、国家/地区【英文标题】:Map User, Address, Country with DDD 【发布时间】:2012-02-04 22:05:01 【问题描述】:我正在尝试使用 spring、hibernate 以及第一次遵循 DDD 创建一个电子商务网站。
目前的情况是这样的。我正在考虑将对象 USER 作为聚合根,它有一个地址列表(以前的..和当前的),并且每个地址都关联一个国家(isocode,名称)..
我假设 Address 和 Country 是 Value Objects.. 与用户严格相关。
在@Entity 类 User 中有: @ElementCollection @CollectionTable(name = "addresses", joinColumns = @JoinColumn(name = "address_id")) @OrderColumn(name="user_id") 私有列表地址;
在 @Embeddable 类 Address 中,我想为 Country 创建一个单独的表,我可以在初始化期间填充该表,并且 Address 只有一个外键。
我尝试了@Embeddable Country 和地址 @嵌入式 私人国家/地区
还有@SecondaryTable .. 但这只能在@Entity 类中使用。所以问题是Country 的字段保存在地址表中。
我应该为 Country 创建一个 @Entity 吗?或者还有其他方法来映射这些类?
谢谢
【问题讨论】:
我通常不喜欢做绝对的陈述,但在这种情况下我会破例.... 你绝对,绝对不应该让数据库架构有任何影响域模型的设计。 DDD 101。 【参考方案1】:我真的不明白将Country
设为嵌入式对象有什么意义。您将一次又一次地为所有用户重复相同的代码和名称,而不是让他们都指向同一个国家。只需有一个包含所有国家/地区的表格,由实体映射,并让所有地址引用与国家/地区具有ManyToOne
关联。
顺便说一句,如果你想设计一个必须输入地址的 UI,我想你需要一个选择框来显示所有可供选择的国家:你不会输入国家的代码和名称每次手动。所以你需要一个Country
实体和一个findAll
方法来获取它们并填充你的选择框。
【讨论】:
以上是关于使用 DDD 映射用户、地址、国家/地区的主要内容,如果未能解决你的问题,请参考以下文章