Современные текстовые редакторы и IDE позволяют легко «рефакторить» код, написанный нами (или кем-то другим). Это действительно рефакторинг, если вы просто переместите код в другое место?

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

Проблема в том, что мы попадаем в ловушку написания очень процедурного кода, который не использует все преимущества объектно-ориентированного подхода. Однако когда мы затем «щелкнем правой кнопкой мыши › Рефакторинг», код потеряет контекст и станет еще труднее читать.

Вот хороший пример кода, который делает слишком много в функции «get_context_data» представления Django.

На первый взгляд кажется, что это довольно простой рефакторинг. Вот наивный рефакторинг:

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

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

Как лучше это сделать? Большинство современных фреймворков веб-приложений имеют способы проверки отправляемых данных. Например, в Django есть формы, которые отлично подходят для этого.

В будущем, когда мы захотим создать комментарий с проверкой, все это будет в одном месте, чтобы мы могли использовать его повторно! И наш «get_context_data» стал еще проще. Более того, Django предоставляет класс FormView, который сделает это еще проще.