Выпутаться - никак, рефакторинг всегда будет нужен, не бывает идеальной программы/кода. Мы выпутываемся потихоньку, не берёмся за глобальные переделки - это зло, рефакторинг должен происходить именно по мелким частям, и чем меньше изменение тем лучше, каждый раз вы всё ближе к цели, а код всё чище. Если вам дают новую фичу - не стесняйтесь сказать, что для этого мне надо переделать то-то и чуть завысить сроки, выделив себе немного времени для рефакторинга, никто от этого не умрёт.
Эмиль Рахматуллин, на одной странице не должно быть 2х одинаковых идентификаторов, привязывайтесь к классу, т.е. не id="delete_input" а class="delete_input" $('.delete_input').click(...);
Максим Федоров, вот что нашёл, если следовать этому правилу то с вами согласен: Объект-значение всегда должен принадлежать одной или нескольким сущностям, он не может жить собственной жизнью. А время жизни объектов-значений должно полностью зависеть от времени жизни их родительских сущностей.
Максим Федоров, тогда уж Entity, a Value Object не обладает неотъемлемой идентичностью, что на практике означает - объекты-значения не имеют поля-идентификатора, в вопросе речь про объект Product всё-таки. Ещё одно свойство/особенность VO - взаимозаменяемость, т.е. простая замена имеющегося объекта другим экземпляром ничего не должна ломать, как это применимо к свойствам разных товаров?