Я дам вам наш опыт рефакторинга LedgerSMB. Мы решили сделать что-то по-другому на ранней стадии и до сих пор делаем именно то, что вы описываете, но без большого количества методов склеивания (кстати, у нас есть несколько методов склеивания, но не очень много).
Жизнь с двумя кодовыми базами
LedgerSMB выжил с двумя кодовыми базами около 5 лет, и пройдет еще несколько, прежде чем старая кодовая база будет устранена. Старая кодовая база - настоящий ужас для созерцания. Плохой дизайн базы данных, Perl создает аналогично IS->some_func(\%$some_object);
коду, который показывает, почему именно иногда используется метафора спагетти (пути выполнения блуждают между модулями и обратно, и между языками, без рифмы и причины). Новая кодовая база избегает этого, перемещая запросы базы данных в хранимые процедуры, имея более чистую структуру для обработки запросов и многое другое.
Первое, что мы решили сделать, это попытаться реорганизовать модуль за модулем. Это означает перемещение всей функциональности в определенной области в новый модуль и затем подключение старого кода в новый модуль. Если новый API чистый, это не имеет большого значения. Если новый API не так уж и сложен, это приглашение немного поработать над новым API ....
Во-вторых, во многих случаях новый код должен обращаться к логике старого кода. Этого следует избегать, насколько это возможно, потому что это приводит к скучным методам склеивания, но не всегда можно избежать этого. В этом случае методы склеивания следует свести к минимуму и избегать, насколько это возможно, но использовать при необходимости.
Чтобы сделать это, вы должны переписать все функции в определенной области. Если вы можете, например, переписать весь код отслеживания информации о клиенте одновременно, это означает, что с кодом, который вызывает его из старого кода, работать не сложно, а отправка старого кода из нового кода сведена к минимуму.
Во-вторых, если у вас есть разумные абстракции, вы сможете выбрать, какой уровень API вызывать и как поддерживать его в чистоте. Тем не менее, вы должны подумать о переписывании частей, которые вызывают ваш API, чтобы они также были немного чище.
Есть много областей бизнес-инструментов, которые являются неснижаемо сложными. Вы не можете избавиться от всей сложности. Но вы можете управлять им, сосредоточившись на чистых API, которые конкретно делают то, что вам нужно, и модулях, которые используют этот API конструктивно. Клей должен быть последним средством только после того, как учтено, что переписывание остальной части вызывающего кода может быть быстрее.