С этой проблемой мы сталкиваемся часто. Должны быть какие-то лучшие практики для решения этой проблемы...
Куда лучше всего поместить обычный код, который манипулирует POJO?
такой, что:
У нас есть схема, определяющая наш домен. Из нее мы генерируем "чистую" модель, состоящую из простых объектов (POJO), которые приходят из JAXB.
Работая с этой моделью, несколько разработчиков в команде создали шаблонный код для доступа и манипулирования моделью. Он "рассыпан" во многих местах. Некоторые создали объекты-обертки, которые подклассифицируют экземпляры модели и добавляют функциональность. Другие создали внешние классы-утилиты. Я хочу унифицировать этот код, чтобы он больше не был "рассыпан повсюду". В идеале, логика может быть заключена в определенном классе объектов, которые четко отвечают за общие манипуляции с моделью.
В качестве общего примера возьмем продуктовый магазин. Объекты модели состоят из таких вещей как:
Products, Aisle, Shelf, Employee, WorkSchedule, Vendor
Общие манипуляции с моделью состоят из таких вещей как:
findManagerWorkingOnDay(day, schedule), findAisleForProduct(apples), countItemsOnShelf(topShelf), product. isModified(), removeProductFromVendor(apples, vendor)
Мы не хотим "загрязнять" наш Vendor POJO функцией типа removeProductFromVendor
. Точно так же мы не обязательно хотим расширять каждый объект модели, чтобы добавить свойство isModified
только для того, чтобы наш GUI знал, что нужно "включить/выключить" кнопку сохранения.
Или нет?
Как только объект модели оказывается в памяти, кто должен отвечать за манипуляции с ним - например, перебрать список "сотрудников, дежурящих сегодня" и найти того, кто является "менеджером?"
В таких случаях обращение к базе данных - излишество, потому что все необходимое уже есть в памяти (например, мы уже сделали запрос к DataStore, и нам нужно работать с объектами-результатами во всем приложении). В идеале этот код должен быть доступен любому объекту, у которого есть, например, список сотрудников.
С точки зрения лучшей практики, где идеальное место для размещения статического метода:
public static Employee findManager(List
который будет перебирать список сотрудников (POJO) и возвращать первого, где employee.title.toLowerCase().contains("manager")
Если бы команда работала с этим примером объектной модели, несколько человек написали бы функции, подобные этой. Каковы некоторые из лучших практик для распределения ответственности, чтобы POJO оставались "чистыми", а один и тот же шаблонный код не "сыпался повсюду"