DDD - сложное сопоставление ORM

Я пишу приложение Java DDD, в котором модель базы данных уже разработана и реализована. Проблема в том, что объекты моего домена отличаются от модели базы данных, а сопоставление ORM слишком сложное. Возникает вопрос: что с этим делать? DTO? Как я могу связать DTO с репозиториями и объектами домена, если они видят интерфейсы репозиториев?

Спасибо!


person Lucas    schedule 26.08.2011    source источник
comment
Я не уверен, как DTO поможет в этом случае. Не могли бы вы привести несколько примеров картографирования, с которым у вас возникли трудности? Вы можете быть удивлены тем, насколько разными можно сделать схему базы данных и модель предметной области. Возможно, вам нужно перепроектировать домен, чтобы он соответствовал базе данных (не так, как обычно, я знаю, но иногда это необходимо).   -  person Paul T Davies    schedule 30.08.2011
comment
Что ж, я столкнулся с той же проблемой, и ни один из существующих ORM (например, HIbernate) не может сопоставить объекты моего домена с существующим устаревшим дизайном базы данных. Сохранение каждой формы приводит к вставке в несколько таблиц и обновлению некоторых полей некоторых других таблиц.   -  person Amir Pashazadeh    schedule 10.12.2017


Ответы (2)


Hibernate имеет очень хорошую поддержку устаревших баз данных. Это выходит далеко за рамки сопоставления class = table. Сложность, о которой вы говорите, не исчезнет, ​​если вы будете использовать дополнительный слой DTO, он просто будет распространен на еще один слой. Может быть проще просто включить его в файлы сопоставления. Возможно, имеет смысл немного изменить модель в соответствии со схемой базы данных, но только в том случае, если вы увидите значительные преимущества с точки зрения снижения общей сложности. А затем реорганизуйте модель предметной области позже вместе с базой данных.

person Dmitry    schedule 31.08.2011

Многие ORM не обладают достаточными возможностями отображения. Более того, они вводят концептуальные ярлыки, которые могут помешать решению адаптироваться к бизнесу. Ваш случай - хороший тому пример.

В вашем случае я бы, вероятно, оспорил использование ORM. Я бы реализовал бизнес-модель, не пытаясь повторно использовать существующую модель базы данных, с POCO, доменными службами ... Для устойчивости, учитывая тот факт, что у вас есть две разные модели, я бы управлял кодом с помощью инъекции зависимостей модели домена в Уровень доступа к данным, чтобы модель хранилища не загрязняла ваш домен, а затем в DAL реализовать мое собственное сопоставление с процедурным кодом и микро-ORM (или ORM, если модель хранилища сложна). Это означает больше работы, но вы получите гораздо лучший Домен.

person Rénald    schedule 10.10.2015