Я разрабатываю новую версию старого веб-приложения и пытаюсь создать подходящую модель домена для веб-приложения.
У меня есть устаревшая база данных, и это точно не изменится. я
созданы отдельные сервисы для чтения и запроса на стороне. Сторона запросов использует простые SQL-запросы с множеством объединений для возврата моделей чтения, которые в основном представляют собой простые DTO с полями из многих таблиц. И это работает
хорошо, эти порции данных используются для заполнения некоторых таблиц и форм на
UI. Проблема возникает, когда мне нужно сделать транзакции и использовать сторону записи приложения. Я не могу описать конкретные случаи использования, но скажем, что я
имеет 3 уровня отношения один ко многим, и мой ORM не поддерживает отложенную загрузку.
Пример:
У меня есть Модель A, Модель B, Модель C. Одна транзакция включает в себя начало и окончание A (и это включает в себя изменение состояния B) и одну транзакцию, удаляющую C (на самом деле просто изменение флага состояния, но это не важно).
Удаление C имеет некоторые ограничения, и я должен проверить состояние всех как.
Чтобы сделать это, особенно последнюю транзакцию, мне нужно построить весь график C. Это не проблема, если кто-то хочет удалить только на
Экземпляр C, но что, если он хочет удалить много экземпляров C? Мне нужно запросить n C по списку идентификаторов, и если n становится большим, производительность падает. Могу я
сделать что-нибудь, чтобы сохранить мою концепцию? Я что-то не так понимаю, потому что я
представьте совокупные корни как концептуальные целые и trasactional единицу, которая проходит «тест удаления» для сущностей?
Пример модели в Java:
Пример модели в java:
public class A {
private Long id;
....many fields....
}
public class B {
private Long id;
private Set<A> as;
....many fields....
}
public class C {
private Long id;
private Set<B> bs;
....many fields....
}
Могу ли я сделать лучшее моделирование. Может быть, обратные отношения и модели A и C как совокупные корни? Но это создаст проблемы с ORM. Буду признателен за любую помощь, я становлюсь невежественным.