Я очень хорошо знаю эту ситуацию. Когда я застреваю таким образом, я пытаюсь придерживаться разных точек зрения на проект.
1.) Точка зрения пользователя / клиента - используйте обратную связь
К сожалению, мы попали в наш код так, что мы не можем увидеть наши собственные недостатки, потому что мы используем наши приложения так, как мы их кодировали. Посмотрите, как люди его используют, и постарайтесь понять, каким будет наиболее интуитивное руководство пользователя. Поиграйте с прототипами пользовательского интерфейса. Это кажется забавным, но если вы обнаружите, что вы будете вынуждены перекодировать огромные части кода, просто изменив логику использования, тогда пора начать цикл перепроектирования.
2.) Сделайте функциональный анализ вашего кода и визуализируйте его
Некоторые IDE и платформы подталкивают вас, например, к смешиванию пользовательского интерфейса и внутреннего кода. Если вы позволите этому случиться, вы однажды столкнетесь с ситуацией, когда ваша кодовая база вряд ли будет поддерживаться из-за туманных и трудноразрушимых зависимостей. Особенно смешивание кода пользовательского интерфейса с другим кодом может привести к появлению спагетти-кода и избыточной функциональности. Разделите ваш код на функциональные блоки, такие как, например, классы базы данных, классы связи, классы пользовательского интерфейса, базовые классы и т. Д. И присвойте функциональным блокам говорящие имена. Затем визуализируйте функциональность с помощью графического инструмента (я использую инструмент отображения разума), чтобы выяснить, является ли ваша структура достаточно логичной и модульной, чтобы вы могли повторно использовать огромные блоки кода для различных проектов и могли бы заменить их более новыми версиями без большая боль
Лучший способ сделать это по моему опыту - создать документ, который визуализирует все зависимости между вашими классами и их вызовами из вашего кода. Результатом является визуализация дизайна вашего интерфейса. Если эта кодовая карта выглядит как полный кластер ***, то пришло время действовать. Если это еще не произошло, вам следует подумать о подходящем соглашении об именах, которое представляет структуру вашего кода таким образом, что вам не нужно думать о том, как его вызвать и что он делает.
3.) Используйте общие подходы к обеспечению качества
Мой любимый это FMEA. С точки зрения кодирования это означает не только проанализировать, что пошло не так в прошлом, но и подумать о том, что могло пойти не так. Довольно распространенный пример - внезапно оборванное сетевое соединение. После того, как вы это сделали, вы можете классифицировать условия ошибки по таким последствиям, как потеря данных, сбой, неправильный расчет и оценить влияние на пользователя. Если это еще не сделано, определение оптимизированных классов ошибок и исключений и подпрограмм может помочь вам сохранить ваш код чистым и понятным. Лучший способ - реализовать их в каждом новом коде, прежде чем даже начинать писать что-то еще. (Ну, я виноват, что не всегда сам следую этому совету.)
Кроме того, это помогло мне создать и часто обновлять «список предложений по улучшению» для моего собственного кода. (Честно говоря, в моих проектах все еще много кода, которым я определенно не горжусь.) Я также стараюсь не торопиться, чтобы собрать и взглянуть на лучшие практики кода из документации API, конференций разработчиков или журналов разработчиков.
До этого момента нет необходимости трогать ваш код. Это просто понимание того, что происходит не так, и поиск способа улучшить свой код.
Напоследок несколько советов по ежедневной работе от старого пердуна. Старайтесь избегать кусать больше, чем вы можете съесть. Это приводит к слишком большому давлению для чистого кодирования. Вы редко получаете время, чтобы сделать это правильно, но вам придется потратить время, чтобы исправить недостатки после этого.
Ничто не является таким долговечным, как временное решение, но когда оно ломается, часто поздно его исправить. Примерами являются неприятные хаки или странные исключения, которые я использовал, чтобы заставить что-то работать, несмотря на, например, недостаток в базовой платформе или ОС. И тогда ошибка исправлена, или новая версия просто удаляет API ...
Если вы застряли и вынуждены найти обходной путь, делайте комментарии и делайте заметки, которые время от времени следует пересматривать. Обычно мы становимся все лучше и лучше благодаря чему-то новому. Если вы найдете лучший способ, используйте его как можно быстрее. В противном случае вы можете найти код для обхода обходного пути и исключения из исключения в один прекрасный день. (Тот, кто без греха среди вас, пусть бросит в меня первый байт.)