Domain driven design 在UI的下拉列表中填充VO

Domain driven design 在UI的下拉列表中填充VO,domain-driven-design,Domain Driven Design,我有Person类,它是其聚合的根,这个聚合还包含国家和州省份作为vo {Person,Country,StateProvince}->Person是根聚合 // 公共人物(字符串名称、字符串国家、州、省、{其他参数}){ //但现在我在UI中遇到了一个问题,如何通过person填充Country和Stateprovince下拉列表,因为它是根聚合,但我不想要任何人指定的Country或Stateprovince,而是想要所有国家及其Stateprovince的列表,以便用户从中选择一个。 我是

我有Person类,它是其聚合的根,这个聚合还包含国家和州省份作为vo

{Person,Country,StateProvince}->Person是根聚合

// 公共人物(字符串名称、字符串国家、州、省、{其他参数}){

//但现在我在UI中遇到了一个问题,如何通过person填充Country和Stateprovince下拉列表,因为它是根聚合,但我不想要任何人指定的Country或Stateprovince,而是想要所有国家及其Stateprovince的列表,以便用户从中选择一个。


我是否手动为country和stateprovince创建表,并手动用所有值填充它们。如果是,那么我将如何从ddd中的这些表中获取值。

您将从不同的表中填充您的country和stateprovince。然后填写这些表中的下拉列表。当使用已经分配了Country和StateProvince的特定Person实体时,您可以通过id将它们与主表绑定


希望能有所帮助。

您可以从不同的表格中填写您的国家和州。然后填写这些表中的下拉列表。当使用已经分配了Country和StateProvince的特定Person实体时,您可以通过id将它们与主表绑定


希望能有所帮助。

您的模特正试图告诉您一些事情

国家和州省份可能不属于人口总数的一部分

还记得非常方便的“删除测试”吗?如果我删除此人,我是否也会删除他们的国家和州?我住在加拿大,你把我从你的系统中删除你也要从你的系统中删除加拿大这个国家吗

不,你不会的。这里有两个单独的聚合,即人员和地点,其中包含{Country,StateProvince}的聚合。如果删除一个国家,则很可能也会删除其中包含的所有州或省

仅仅因为Person引用了一个类或has-a类,并不能使所有引用都成为该聚合的一部分。在许多系统中,位置是非常常见的集合,并且通常独立存在


您应该有一个使用LocationRepository的Person存储库,并让UI直接调用LocationRepository来获取位置聚合。

您的模型试图告诉您一些事情

国家和州省份可能不属于人口总数的一部分

还记得非常方便的“删除测试”吗?如果我删除此人,我是否也会删除他们的国家和州?我住在加拿大,你把我从你的系统中删除你也要从你的系统中删除加拿大这个国家吗

不,你不会的。这里有两个单独的聚合,即人员和地点,其中包含{Country,StateProvince}的聚合。如果删除一个国家,则很可能也会删除其中包含的所有州或省

仅仅因为Person引用了一个类或has-a类,并不能使所有引用都成为该聚合的一部分。在许多系统中,位置是非常常见的集合,并且通常独立存在


您应该有一个使用LocationRepository的Person存储库,并让UI直接调用LocationRepository以获取位置聚合。

我将如何填充,在何处编写检索函数,在Person存储库中,但据我所知,存储库只提供根agg@kamai通常,您会将这些表作为系统种子数据的一部分进行填充。通过手动输入所有国家及其各自的州和省,或通过第三方获取此数据。例如,美国邮政服务提供收费的美国州和邮政编码数据,我相信也有其他供应商支持更多的国家。但是位置数据要么是手动输入的,要么是购买的,除非你做一些像foursquare这样的众包,让你的用户添加位置。我将如何填充,在哪里编写检索函数,亲自存储库,但据我所知,存储库只提供根agg@kamai通常,您会将这些表作为系统种子数据的一部分进行填充。通过手动输入所有国家及其各自的州和省,或通过第三方获取此数据。例如,美国邮政服务提供收费的美国州和邮政编码数据,我相信也有其他供应商支持更多的国家。但是位置数据要么是手工输入的,要么是购买的,除非你做一些像foursquare这样的众包,让你的用户添加位置。@Nilesh我建议编辑/重写这个问题。我认为让海报困惑的是如何确定总体边界。如果看不到一些具体的例子,它可能会令人困惑。我已经重写了它,使之更清晰。可能是@Nilesh的重复我建议对这个问题进行编辑/重写。我认为让海报困惑的是如何确定总体边界。如果看不到一些具体的例子,它可能会令人困惑。如果我删除一个人,那么在我的理解中,如果你删除一个人,比如约翰,你删除的是约翰的条目以及约翰与国家的关联,在单独的表格中。我在单独的表格中维护国家和州的表格。SO当我删除John时,我将从Person的基本表中删除条目,并从John和country之间有关系的表中删除条目,但不在country和StateProvince的单独表中。HandlingHistory lookupHandlingHistoryOfCargo(TrackingId TrackingId)这是Evan示例项目中的一个函数,我们可以看到,这个函数返回HandlingHistory,它是HandlingEvent aggre中的vo