2009-12-17 4 views
1

Я делаю массовый рефакторинг в бизнес-приложении Spring-Java EE. Тем не менее, весь рефакторинг будет находиться в пределах многих статических классов, которые мы используем как классы полезности (валидаторы, алгоритмы, логика обработки объектов, управление ресурсами, отличные утилиты и т. Д.), А не внутри контроллеров и классов устойчивости.Массивный рефакторинг весной Java EE

Кроме того, критические контроллеры, которые используют методы из этих статических классов полезности, не будут затронуты, поскольку я делаю изменения максимально прозрачными.

Все дело в том, что я являюсь владельцем некоторых контроллеров, поэтому я могу вносить изменения и внести необходимые изменения для внесения изменений в мои статические классы полезности. Например, если я изменил метод, чтобы создать настраиваемое исключение, я также могу войти в контроллер и обработать это исключение изящно.

Однако это большой проект, и над ним работают многие другие разработчики, многие из которых используют эти статические классы полезности изо дня в день. Поэтому, если я выкидываю новые Исключения, создаю новые перегрузки и т. Д., Он разрушает устаревший код.

Я уже устал от написания совместимого (читаемого: искалеченного) кода, который не является семантическим, обертывает существующую уродливую логику и не позволяет мне создавать более гибкие конструкции.

Учитывая, что у нас есть приличное (точное: 2 месяца) расстояние от производственного дня, нормально ли мне просить всех разработчиков реорганизовать свой код в соответствии с моими новыми контрактами, или я продолжаю писать устаревшие, обернутый мусором код, который на самом деле ничего не помогает?

ответ

1
  • Сделайте свой новый код в новом (чистом) пакете и, возможно, даже в банке.
  • Измените существующий унаследованный код на «адаптировать» и делегируйте/перейдите к новой реализации.
  • Попросите потребителей перейти на новый пакет.

Таким образом, люди, использующие новый материал не должен видеть «наследие-мусора, обернутый код, который на самом деле не поможет ничего», но вы предоставите путь вперед, когда не все клиенты должны сразу измените весь свой код (и вы дадите четкую документацию, какой код они должны использовать вместо старых способов, внутри реализаций, которые используют новый код).

BTW Многие статические классы не кажутся самой тестируемой базой кода. Рассматривали ли вы использование дополнительной функции «экземпляра» и инъецирования экземпляров в потребителей, что обычно делает код более легким для тестирования ...

+0

Продвинутый, но я не согласен с последним абзацем. Классы полезности должны быть совершенно прекрасными как статические классы, а инъекция значительно усложняет будущий рефакторинг, если не делает его практически невозможным. –

0

Я говорю об изменении его и разбиваю весь код, который заслуживает разрыва. Просто кто эти другие разработчики, которых вы должны поддерживать? Потомки взлома Страуступа/Гослинга в ВМ? Держу пари, нет.

Я был где вы в настоящее время, и я должен был мириться с дебилами, которые требовали, чтобы я заглушаю все (недавно представили) Арифметические исключения внутри функции, потому что все его обращения к этой функции устранила простой исключающий chewer. Его модули несли бы веселье, хотя семантика уже была бы сильно завалена, вы можете себе представить? У нас было много ошибок для исправления.

Не мириться с чем-либо некачественным или компромиссом любой формы. Разбейте его, теперь, и постройте его чище, стройнее. Сначала люди будут топать ногами и создать фиаско, но если вы напишете действительно лучший (более надежный и оптимизированный?) Код, они в конце концов оценят это.Вопрос времени.

И я согласен с Fried, слишком много статических классов с этими методами «полезности» - это не очень хорошая идея. Он выглядит более процедурным, чем 00. Попробуйте моделировать поведение и состояние, основанное на бизнес-аспектах.

E.g. Если у вас есть класс учетной записи и вы хотите написать несколько классов утилиты для выполнения таких задач, как настройка учетной записи, удаление учетной записи, передача учетной записи и т. Д., Вам лучше идти по дороге на основе экземпляра и моделировать истинный способ поведения + поведение, используя объекты. Более проверяемый, более семантический, более читаемый, менее статический процедурный беспорядок.

Удачи.

1

Серьезно, почему вы спрашиваете нас, а не ваша команда? Это ваша проблема.

Смежные вопросы