Как отметил @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, поскольку:
- атрибуты не могут содержать несколько значений (элементы могут)
- атрибуты не могут содержать древовидные структуры (элементы могут)
- атрибутыне легко расширяются (для будущих изменений)