Geo*_*uer 5 architecture domain-driven-design
我刚刚开始研究域驱动设计,很可能我对实体/值的划分是错误的,所以如果是这样,请告诉我.
根据我的理解,由于其身份完全由其属性定义,因此Address是典型的值对象.根据我的理解,这意味着不应该有地址的单独的存储库或数据访问对象.
这给我带来了两难境地,因为在我的情况下,地址包含一个国家/地区,其中国家/地区具有名称和国家/地区代码,国家/地区代码列表应该从数据库中加载.
我的问题是,我该如何设计呢?我希望人们能够使用new运算符创建地址,但我不想为国家/地区创建数据访问对象,如果我这样做,我当然不希望在地址对象中添加对它的引用.
我有一些想法,但我想听听任何人的建议.
这给我带来了一个困境,因为在我的例子中,地址包含一个国家/地区,其中国家/地区有名称和国家/地区代码,并且应该从数据库加载国家/地区代码列表。
地址对象不会将国家/地区列表作为其属性。相反,它会有一个国家对象的单个实例。表示层将提供国家/地区对象的列表,可能位于下拉列表中。加载一个特定地址后,您可以将下拉列表的值设置为等于国家/地区对象的国家/地区 ID,该对象是地址对象的一个属性。换句话说:
myDropDown 的(包含 Country 对象列表)选定的对象值 = address.Country 或 myDropDown 的键值 = address.Country.ID
现在,为了填充表示层,您的数据访问层应该提供一个返回国家/地区对象的原始列表的函数。以 .NET 的方式,它会是这样的:
Namespace Dal
Public NotInheritable Class Countries
...
Public Shared Function Read(ByVal countryId as Integer) As BusinessObjects.Country
...
Public Shared Function ReadList() As List(Of BusinessObjects.Country)
...
Run Code Online (Sandbox Code Playgroud)