То, что я заметил после работы более года на довольно большом сайте, касалось в основном нашего дизайна / кодирования. Это не связано просто с рефакторингом, и, возможно, вы уже много знаете, но, возможно, это поможет:).
- Самое главное, мы не всегда помещали наш код в нужное место. В методах представления было слишком много функциональности, слишком мало в формах и моделях. Я вижу эту проблему много раз. Для обработки ввода используйте формы, чтобы отформатировать / настроить / ... данные модели, использовать методы или свойства модели. Серьезно, в какой-то момент я сократил просмотр примерно с 150 строк до 20, просто поместив код в лучшие места. Очень хорошо улучшает ремонтопригодность и читаемость
- Во многих кодах, которые мы написали, на самом деле не использовались все силы python и / или django. Во-первых, чтение чего-то вроде Dive Into Python было очень полезно, во-вторых, я просто отследил все сложные конструкции, которые мы построили (в основном унаследованный код из 0.96), и посмотрел, есть ли альтернативы в Django Docs. Конечно, не тратьте свое время, пытаясь свести все к одной строке, но, безусловно, с устаревшим кодом это может помочь улучшить читаемость и удобство обслуживания.
- Всегда смотрите на такие сайты, как django-snippets , google code , ... если есть достойные существующие проекты django, которые могут лишить вас многих функций. Зачастую на эти проекты смотрят больше людей, и поэтому они более стабильны и эффективны. Если проект не удовлетворяет всем вашим требованиям, то может быть хорошей идеей просто добавить свои требования самостоятельно, а не делать все индивидуально для вашего сайта.
- Постарайтесь сохранить минимальные перекрестные зависимости приложения. Когда вы рисуете граф зависимостей (например, связывая каждое приложение, имеющее внешние ключи друг с другом), оно все равно должно быть ясным, а не то, где каждое приложение связано с каким-либо другим приложением. Обычно у вас есть несколько «вспомогательных» приложений (например, пользовательская система, тегирование), которые используются многими, и все остальные приложения на самом деле зависят только от этих приложений.
- Пишите тесты, у django отличный набор тестов, так что используйте его. Конечно, для частей кода, которые являются общими для многих приложений и могут измениться. На самом деле, ничто так не раздражает, как внезапное замечание ошибки, которую вы фактически исправили 4 месяца назад, и у вас нет ни малейшего понятия, какое обновление с тех пор сломало его снова.
- Еще раз взглянем на нормализацию базы данных, модель django по-прежнему тесно связана с реляционными базами данных, и поэтому это важная концепция, конечно, когда вы работаете с моделями, которые, вероятно, будут расширены позже.
Что касается реального рефакторинга, то единственный важный инструмент, о котором я могу подумать, это South , который может вам очень помочь, если ваша схема базы данных изменится. В противном случае, как подсказку, которую я уже дал: напишите тесты, чтобы убедиться, что ваша функциональность до и после рефакторинга остается прежней.