DDD Компонент для класса генератора XML - PullRequest
0 голосов
/ 25 сентября 2018

Я работаю над приложением, построенным на принципах 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 и где я могу разместить их в структуре моего проекта?

1 Ответ

0 голосов
/ 26 сентября 2018

Как отметил @Constantin Galbenu в комментарии, ваш генератор XML должен находиться на уровне инфраструктуры, поскольку «генерация XML» - это логика, не зависящая от приложения.

Следующий вопрос заключается в том, сопоставляете ли вы свои сущности непосредственно с XML и насколько сложны эти сущности.

Если данная сущность является просто набором полей, вы можете иметь общее отношение один к одному - то есть каждая сущность может быть представлена ​​в виде плоской XML-структуры, тогда вы можете заставить ее работать с одной точкой входадля всех таких лиц.Я хотел бы сослаться на то, что вы делаете, на s Преобразование.

Если ваши сущности являются сложными и содержат конкретные объекты ValueObject, то у вас должен быть способ извлечь эти данные в определенную структуру XML.

Я бы предпочел не говорить о «отображении» из-за сложности, которая может возникнуть, когда у вас есть сущности, содержащие много объектов ValueObject и ссылающиеся на другие сущности.Плюс 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 для представлений объектов-значений:

<Product>
   <Name>Nm</Name>
   <Description>Desc<Description>
   <Price amount="12.09" currency="EUR"></Price>
</Product>

Если вы хотите более сложные преобразования из ваших объектов в XML, вам понадобится Transformer для каждогоТип объекта, который вы трансформируете.Я бы предпочел придерживаться элементов XML, поскольку:

  • атрибуты не могут содержать несколько значений (элементы могут)
  • атрибуты не могут содержать древовидные структуры (элементы могут)
  • атрибутыне легко расширяются (для будущих изменений)
...