The Cost of Premature Abstraction

Цена преждевременной абстракции.

Vlad
Clean Code

--

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

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

Легко дать определение “преждевременной абстракции”. Гораздо труднее по-настоящему узнать, когда абстракция действительно преждевременна.

When is Premature Abstraction Most Common?

Когда чаще всего встречается преждевременная абстракция?

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

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

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

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

Некоторые из наиболее распространенных случаев оптимизации происходят с функциями "helper / utility". Если вы обнаружите, что ваша абстракция должна проверять многочисленные случаи ввода, это хороший признак того, что абстракция была преждевременной или, по крайней мере, что она переросла в свою первоначальную цель.

Еще один случай: использование сложных библиотек или шаблонов. В мире JavaScript такие библиотеки, как Redux, RxJS, NgRx и т.д., очень полезны, особенно для новичков. Мы на самом деле большие поклонники их всех, но обнаружили, что их использование в неподходящих местах приводит к плохим конечным результатам.

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

The True Cost of the Wrong Abstractions.

Истинная цена неправильных абстракций.

Это своего рода парадокс, но абстракции могут одновременно усложнять и упрощать код — даже если вы выбираете правильную абстракцию в нужное время.

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

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

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

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

Instead of Abstractions.

Вместо абстракций.

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

Идеал лежит где-то между ними. Повторять - это нормально! На самом деле, мы считаем, что вы должны повторить какой то код по умолчанию. Код, который вы написали, на самом деле должен использоваться несколько раз, и что любые варианты, которые вам нужно поддерживать, не являются значительными.

Конечно, некоторые вещи по определению абстракции неизбежны даже с самого начала; например, вы не хотите, чтобы ваше приложение JavaScript запрашивала вашу базу данных напрямую. Но даже в таких случаях вы можете свести к минимуму свои первоначальные абстракции.

Conclusion.

Вывод.

Прежде всего, помните, почему мы создаем абстракции для начала?Для того, чтобы упростить повторное использование кода, исправить ошибки в одном месте и скрыть детали реализации.

Абстракции необходимы, и они вокруг нас.

Translation: medium
Help us with your claps :)

--

--