Как сохранить консинстентность между двумя кусками кода в приложении которые дублируют бизнес логику?
Есть проблема, в проекте на java с некоторым MVC фреймворком, есть два места с дублированием логики сохранения пользователя. Специфика приложения такова, что
1) Ведется аудит изменений состояния(полей) юзера при сохранении. При чем у него много дочерних объектов.
2) И из этого аудита восстанавливается состояние юзера.
3) При воостановлении нужно учесть порядок вызова методов, выполнения некоторых дополнительных действий вроде отправки сообщения на email о создании.
Основная проблема в поддержки данной функциональности то что юзер сохраняется в двух местах 1) В контроллере из бина с данных полученых с клиента. 2) С аудита в аудит менеджере.
И при дальнейшем изменении в контроллере либо порядка сохранения либо добавление новых/удаление полей юзера нужно как то сохранить консистентность в контроллере и в аудит менеджере.
При таком варианте нужно будет много рефакторить. И придумать один механизм заполнения юзера из бина, и из аудита. Как вариант, но может есть более простой способ?
ChelFeb: А вот тут надо прикинуть что больше : затраты на рефакторинг или на поддержание консистентности. Если этот участок кода не будет часто меняться, наверное стоит его так и оставить ? Тут как бы надо понять что "разработка - это боль" (с). И лучшего решения как поступить в том или ином случае нет, если это не какой-то тривиальный случай. Обычно выбирают из двух зол меньшее и если повезет, то выбор будет удачным.