Рефакторинг кода на основе тегов ColdFusion 5 в CFC
Я чувствую необходимость реорганизовать мой старый код на основе CF5 в CFC. У нас уже есть некоторый код в ColdSpring и Transfer, но мы чувствуем большую переписку в ColdSpring, и Transfer не имеет смысла.
Какие советы, подходы и ошибки я попал.
Как я могу сделать это легко?
Я не против оставить ColdSpring в миксе, но Transfer - это то, чего я боюсь из-за размера проекта.
редактировать: моя база кода идет в течение 7-8 лет и огромна. Описать это было бы сложно, однако я ищу общие предложения по подходам
6 ответов
Изменение всей кодовой базы только ради нее, если она в принципе работает, внесло бы много потенциальных ошибок в вашу систему. Я не думаю, что есть простой способ сделать это.
Если вы посмотрите на области вашего сайта, которые 1: наиболее вероятно изменится и 2: исполнены максимально, вы сможете ориентироваться на некоторые области, которые могли бы извлечь выгоду из изменений, и увидеть, насколько легко они вписались бы в структуру на основе ХФУ, и какие выгоды. Но для большей части кода, если он работает нормально, нет необходимости менять его.
Однако всякий раз, когда вам необходимо внести существенные изменения в часть системы, возможно, стоит взглянуть на это с точки зрения ОО и перенести существующий код, где это применимо.
В одном из моих текущих проектов (почти такая же ситуация, даже больше - большая часть кода действительно плохая), я использую технику, которую я назвал "стиль волны". Общие идеи, которые я использую, следующие:
- Разделение обработки с выхода. Я не могу реализовать настоящий MVC здесь, но, по крайней мере, я могу переместить представление в отдельные шаблоны (иногда использовать их повторно) и подготовить все данные в базовых (модельных) шаблонах.
- Переместите весь повторяющийся код в компоненты - это один из самых важных советов.
- Сгруппируйте связанные функции в компоненты. Скажем, вся связанная с клиентом информация сгруппирована в CustomerManager.cfc, счета в InvoiceManager.cfc и т. Д.
Почему "волна"? В большом проекте я не могу просто сидеть и переписывать весь код, связанный с клиентом. Так что я сделал это шаг за шагом. Например, мне нужно поработать над регистрацией клиента, расширить ее несколькими атрибутами. Я создал базовый компонент, перенес туда методы для проверки формы (проверка логина, электронной почты и т. Д.) И добавления клиента - так что эта страница работает в новом стиле. Позже мне нужно будет улучшить страницу счета-фактуры, где мне нужно получить информацию о владельце счета-фактуры: я просто добавляю метод в менеджер клиентов и избавляюсь от прямых запросов. Позже отредактируйте страницу клиента... Также ее можно назвать "рефакторинг по требованию" или что-то в этом роде.
Могут быть дополнительные вещи, зависящие от вашего текущего состояния проекта. Но это мне очень помогло. Надеюсь, вы найдете эти советы полезными.
Прежде чем что-то менять: создайте полный набор регрессионных тестов!
При рефакторинге целью должно быть в первую очередь сохранение функциональности, чтобы вы напрямую не влияли на клиентов.
Я также согласен с рефакторингом Сергея в стиле волны - это позволяет разбивать вещи на управляемые куски, а не делать все за один раз.
Но какой бы метод вы ни использовали, чем больше регрессионных тестов вы сможете создать, тем лучше - это действительно единственный способ подтвердить, что вы случайно не изменили что-либо.
Я бы посоветовал начать с инкапсуляции вашей бизнес-логики в CFC, а не беспокоиться о целом уровне представления вашего сайта.
Просто сконцентрировавшись на бизнес-логике, вы сможете получить наиболее важные функциональные возможности в CFC и упростить кошмар обслуживания. Также не составит труда просто "вставить" эти ХФУ в свой существующий сайт.
Получив как можно больше бизнес-логики в ХФУ, вы заметите, что огромный монстр был сокращен до размеров. Теперь вы можете решить, что вы хотите делать с уровнем презентации вашего сайта. Теперь вы можете выбирать из множества доступных платформ (CFWheels, FuseBox, ColdBox, Mode-Glue) для переноса через уровень презентации.
Или вы можете просто сказать "черт с ним" и переписать все это в CFWheels с самого начала:)
Это очень сложно (почти невозможно) ответить, не зная вашего кода.
Вопрос немного напоминает: "Я хочу разобрать мой старый Volkswagen и собрать новый из частей, что я должен рассмотреть?":-)
Если вы не используете контроль версий, установите его, прежде чем делать что-либо еще. Возможность отказаться от сломанного рефакторинга - это серьезный спасатель. После этого я согласен с тем, что было размещено. Вы будете хотеть брать маленькие куски за один раз - разделяй и властвуй.