Я не много занимался программированием на Java, и, следовательно, у меня в голове крутится множество вопросов без ответа об ORM, которые могут показаться довольно простыми для более опытных людей.
Допустим, у нас есть два класса: клиент и заказ. Класс Customer реализует метод с именем listAllOrders. Какой должна быть подпись метода?
Set<Order> getAllOrders();
// путь ООП
Set<Integer> getAllOrders();
// дружественный к дБ способ, основанный на предположении, что каждому заказу присваивается уникальный int id
int[] getAllOrders();
// дружественный к БД способ, оптимизированный
Set<OrderID> getAllOrders();
// способ ООП, оптимизированный
Другое? Комбинация вышеперечисленного через метод перегрузки?
Я думаю сразу отказаться от 3-го варианта, поскольку оптимизация преждевременна, неуместна и может вызвать больше проблем, чем пользы.
Выбор между 1-м и 2-м вариантами, главным аргументом, по-видимому, является то, что во многих сценариях возврат набора заказов вместо идентификаторов будет излишним.
1-й вариант всегда требует предварительной загрузки ордеров в память, и хотя некоторые свойства ордеров могут быть обработаны посредством отложенной загрузки самих объектов ордеров, они все равно потребуют значительно больше памяти, чем набор необработанных идентификаторов. Другая причина, по-видимому, заключается в том, что отложенная загрузка не даст мне преимущества использования модификатора final
для обеспечения неизменности полей Order.
Однако вариант 2 на самом деле не инкапсулирует нумерацию заказов, т. Е. Если было решено начать использовать строковый UUID или длинный как идентификатор заказа вместо целого числа, возникла бы необходимость в серьезной перезаписи. Очевидно, что это может быть смягчено введением нового легкого объекта с именем OrderId (4-й подход).
Что ж, на данный момент я очень ценю помощь от ORM и Java-гуру!