1

Я работаю над устаревшим программным обеспечением C++, которое имеет много бизнес-логики, смешанной с презентационной стороной вещей. Я хочу полностью очистить и реорганизовать код, поэтому есть четкое разделение проблем. Для этого я смотрю MVC или какой-либо другой подходящий шаблон дизайна.Рефакторинг устаревшего приложения с толстым клиентом

Я хотел бы получить рекомендации от людей, которые прошли этот путь до -

ли я использовать MVP или MVC (или другой шаблон)?

Что является/является наилучшей практикой для проведения чего-либо подобного (например, полезных шагов/проверок)?

+0

Изменилась ли терминология с «толстого клиента» на «толстый клиент»? Или FAT имеет другие значения за пределами толщины? – Ants

+0

@Ants: он всегда был «толстым» в контексте таких приложений. Думаю, вы думаете о терминалах? – Thorarin

+0

Какая структура или инструментарий - это графический интерфейс, реализованный с помощью? –

ответ

1

Наиболее полезным шагом является создание очень надежного и полного набора регрессионных тестов, независимо от того, какой шаблон вы выберете.

Чтобы выбрать между MVP и MVC, пожалуйста, рассмотреть их различия в этом вопросе SO:

What are MVP and MVC and what is the difference?

1

Если MVP против MVC ваша главная проблема, вероятно, можно выбрать свободно.

На это решение влияют три фактора: ваш предыдущий опыт, поддержка вашей инфраструктуры/библиотек и которая лучше подходит к существующей кодовой базе.

В моем epxerience оба шаблона соответствуют устаревшим приложениям C++, таким как кошачий блеск на свадебном пироге. Ваши основные проблемы будут следующими:

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

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

Rewrite против Refactor Вы уже заявили свое решение, так что я просто выдвигал аргументы про переписывание считать: если у вас есть четкая спецификация и понять, как современные пользователи используют это приложение, перезапись может быть быстрее и дешевле когда требуется 30% или более кода. (Это не означает, что «переписать все», это может также означать сокращение применения к логико-только, а затем сажает новый презентационный слой поверх него)

Предполагая, что вы идете на реорганизовать:

Определите свои цели Зачем вам нужно реорганизовать приложение? Хорошими причинами могут быть множество новых функций, которые должны быть реализованы, уровень представления необходимо заменить или не использовать, чтобы оставаться нормальным. Исходя из этого, решите, что нужно изменить, и что может оставаться таким, каким оно есть.

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

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

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

Придерживайтесь небольших, обратимых изменений Если шаг рефакторинга идет не так, он должен быть достаточно маленьким, чтобы быть выброшенным без колебаний. Иногда это непросто, мои типичные худшие шаги:
- решить, какие функции заменить. Планируйте, как должен выглядеть новый код. - переместить существующий код за интерфейс, который также работает для нового кода - тест - заменить функциональность нового кода - тест - иногда, интерфейс «окончательный», somethimes вы можете удалить/уменьшить его

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

0

Вы должны взглянуть на «Эффективно работая с устаревшим кодом» Майкла Перса. В книге описывается, как получить существующий код в тестовом жгуте, а также как безопасно сломать зависимости в коде.