我正在开发基于DDD原理的应用程序,下面是项目结构。
App (Background task)
--> DomainEventHandlers
-->SomeDomnainEventHandler.cs
Domain (Class library)
--> Models
--> SomeAggregate.cs
--> SomeEntity.cs
--> SomeValueObject.cs
Event
--> SomeDomainEvent.cs
触发SomeDomnainEvent时,将通过中介调用SomeDomnainEventHandler.cs
。在我的SomeDomnainEventHandler.cs
中,我试图将SomeEntity.cs
映射到XML映射器类以生成XML消息。
我的问题是,我的XML映射器类和XML消息生成器与哪个DDD组件相关联,并将它们放置在项目结构中的什么位置?
答案 0 :(得分:0)
正如@Constantin Galbenu在评论中所述,您的XML生成器应位于基础结构层,因为“生成XML”是非特定于应用程序的逻辑。
下一个问题是您将实体直接“映射”到XML以及这些实体有多复杂。
如果给定实体只是一组字段,那么您可以具有通用的一对一关系-即每个实体可以表示为平面XML结构,那么您可以使其针对所有此类实体使用单个入口点工作实体。我指的是您在做的转换。
如果您的实体很复杂并且包含特定的ValueObject,则应该有一种方法可以将数据提取到特定的XML结构中。
实际上,我宁愿不谈论“映射”,因为当您拥有包含许多ValueObjects的实体并引用其他实体时,可能涉及到复杂性。加上VO可以避免在域的其他情况下在对象之间进行映射。
我可以在脑海中看到的一个简单的说明性示例:
Product has the following properties:
Name (String)
Description (String)
Price (Money Value Object)
Amount (Decimal or integer internally)
Currency ()
这可以用XML表示:
<Product>
<Name>Nm</Name>
<Description>Desc<Description>
<Price>
<Amount>12.09</Amount>
<Currency>EUR</Currency>
</Price>
</Product>
或者您可以将XML属性用于Value Objects的表示形式
<Product>
<Name>Nm</Name>
<Description>Desc<Description>
<Price amount="12.09" currency="EUR"></Price>
</Product>
如果要从Objects到XML进行更复杂的转换,则需要为要转换的每种Object类型都配备一个Transformer。 由于以下原因,我会坚持使用XML元素: