avl (avl) wrote,
avl
avl

Categories:

18. Простота лучше универсальности

(В оригинале Simplicity before generality, use before reuse)

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

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

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

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

Автор оригинала - Kevlin Henney

Перевод мой. Если вы решите использовать его полностью или частично, не забудьте указать ссылку на мой живой журнал!
Tags: 97_things_architect_should_know
Subscribe

  • Про интерфейсы

    Была у нас в офисе микроволновка. Старая, самая простая, вот такая: Весь интерфейс — два поворотных регулятора. Один задает…

  • Книжный магазин номер 1 в рунете? Ага...

    Вчера я понял, почему у книжного магазина название "Лабиринт". Это тонкая ирония по поводу его интерфейса пользователя. Чтобы там что-нибудь купить,…

  • Шкода Рапид TSI 1.2

    Давно уже присматривался к этим машинам, в частности, из-за их типа акции "1% в месяц", но т.к. поблизости от работы нет ни одного дилера, как-то не…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments