Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Domain driven design 分布式领域驱动设计中的价值对象列表_Domain Driven Design_Lookup - Fatal编程技术网

Domain driven design 分布式领域驱动设计中的价值对象列表

Domain driven design 分布式领域驱动设计中的价值对象列表,domain-driven-design,lookup,Domain Driven Design,Lookup,我需要一些关于在分布式DDD应用程序中实现价值对象列表的具体指导。以下是我所拥有的: 我的应用程序基于运行在服务器上的RESTful服务应用程序,该服务器向多个客户端应用程序提供服务。我的一个实体Customer具有一个Region属性,该属性包含对许多Region值类型之一的引用。区域列表存储在后端数据库中,但我们不提供维护此列表的接口。任何更改都将直接在数据库中进行(因为这种更改非常罕见),并且很可能是名称更改,而不是添加/删除。有时,就像扩展到新市场一样,可以添加一个新项目,因此对列表的要

我需要一些关于在分布式DDD应用程序中实现价值对象列表的具体指导。以下是我所拥有的:

我的应用程序基于运行在服务器上的RESTful服务应用程序,该服务器向多个客户端应用程序提供服务。我的一个实体Customer具有一个Region属性,该属性包含对许多Region值类型之一的引用。区域列表存储在后端数据库中,但我们不提供维护此列表的接口。任何更改都将直接在数据库中进行(因为这种更改非常罕见),并且很可能是名称更改,而不是添加/删除。有时,就像扩展到新市场一样,可以添加一个新项目,因此对列表的要求是“动态的”

在一个客户端UI中编辑客户记录时,我需要在下拉列表中显示区域列表,其中所选项目与客户域对象的区域属性关联

我可以处理它的UI端,但不清楚如何在我的域层中获取和维护区域列表。我是否有单独的RegionRepository,或者应该从CustomerRespository检索列表?如果客户是引用价值对象的唯一实体,该怎么办?如果多个实体引用了VO,这会改变方法吗

实际上,我有很多这样的查找类型,不想为每种类型创建单独的存储库(和web服务),除非建议这样做。我曾考虑过为API提供一个查找服务,但在我更好地了解此路由将产生的影响之前,我对实现该服务犹豫不决


虽然列表项是“键控”的,但它们不符合具有自己标识的实体定义,并且它们不存在,除非在父域对象(在本例中为客户)的上下文中。所以我假设它们是值对象,这很好。但是,同样,我不清楚我应该如何构造我的应用程序,以允许客户端检索我上面描述的场景中的VO列表。

您可以将它们放在任何有意义的地方。选择公开属性并实现存储库不会违反DDD的任何约定

作为示例,我使用以下内容:

interface IAddress
{
    List<State> GetStatesByCountry (string country);
}
界面设计
{
列出GetStatesByCountry(字符串国家);
}
我也有

interface ITaxes
{
    List<State> GetStates ();
}
接口ITaxes
{
列出GetStates();
}

在我的例子中,这两个都是由ILookupRepository实现的,因为这就是特定后端系统的设计方式。然而,在我们的另一个系统中,我们有一个实际的ICountryRepository,因为后端和服务都与上述系统不同,这对该场景更有意义。

我发现这个问题的关键是后退一步,评估查找列表实际存在的上下文。例如,区域列表可以是销售区域、地理区域、,等等。识别这一点通常会导致我找到另一个上下文对象,该对象的列表作为子对象存在。

我的理解是,当您将集合作为对象的属性公开时,会假定结果以某种方式位于父对象的上下文中。有鉴于此,我假设ITaxes.GetStates()将返回适用该税的州的列表,而不一定是所有50个州的列表。你不同意吗?