Перевод слова dry с английского на русский

Ошибочное понимание принципа DRY 30

  • 27.02.18 09:42


AloneCoder

#349978

Хабрахабр


Перевод

11000

IT-стандарты, PHP, Блог компании Mail.Ru Group, Разработка веб-сайтов, Анализ и проектирование систем

Я знаю, о чём вы подумали: «Ещё одна скучная статья про DRY? Нам их мало, что ли?».

Возможно, вы правы. Но я встречаю слишком много разработчиков (junior и senior), применяющих DRY так, словно они охотятся на ведьм. Либо совершенно непредсказуемо, либо везде, где можно. Так что, судя по всему, в интернете никогда не будет достаточно статей о принципе DRY.

Если кто не знает: принцип DRY — это «Don’t Repeat Yourself» (не повторяйся), и впервые о нём упомянуто в книге The Pragmatic Programmer. Хотя сам по себе этот принцип был известен и применялся задолго до появления книги, однако в ней ему было дано название и точное определение.

Итак, без лишних рассуждений отправимся в путешествие по чудесной стране DRY!

Как расшифровать значки

Инструкция по стирке в ряде случаев может содержать пояснения на нескольких языках. Из наиболее популярных и известных для нас языков чаще всего используется английский. Вы можете встретить на ярлыке одежды подобные описания: «Machine wash only. Tumble dry low. Do not bleach. Do not iron. Do not dry clean.» Текст дублирует смысл изображенных символов, поэтому даже если текстовых пояснений нет, по знакам можно понять основные условия бережного ухода и сохранения внешнего вида изделия.

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

Первый значок на одежде, как правило, касается стирки. Помимо основного знака возможны несколько вариантов температурного режима:

  • 30 градусов или 1 точка – машинная или ручная стирка одежды и белья в холодной воде или выбор деликатного режима для синтетической одежды;
  • 40 градусов/ 2 точки – стирка в стиральной машинке в воде средней температуры, такое обозначение можно встретить на ярлычках на одежде из синтетики или хлопка с пестрым набивным рисунком;
  • 60 градусов/ 3 точки – стирка в стиральной машинке одежды и белья из однотонных натуральных тканей при температуре воды не более 60;
  • 95 градусов – возможно кипячение, оптимально для изделий из хлопка и льна светлых тонов.

Если рисунок дополнен изображением руки, допускается только ручная стирка в воде комнатной температуры.

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

  • 1 точка – низкие температуры при отжиме и сушке;
  • 2 точки – средние температуры при отжиме и сушке;
  • 3 точки – допускаются высокие температуры.

Если в квадрате изображены 3 вертикальные черты – допускается машинная сушка одежды или белья без выжимания, одна горизонтальная линия – только горизонтальная.

  • 1 – глажка разрешена при низкой температуре до 110 градусов, как правило, для синтетических тканей;
  • 2 – при температуре до 150 градусов, на такой температуре можно гладить изделия из натурального шелка или шерсти;
  • 3 – до 200 градусов, допускается при отпаривании натуральных изделий из хлопка и льна.

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

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

Вещи, предназначенные для профессиональной чистки, как правило, нельзя стирать. При этом дополнительно могут быть ограничения по допустимым вариантам чистки. Если на бирке изображен кружок, возможна сухая химчистка. Перечеркнутый кружок обозначает, что любой вид чистки запрещен. Чистка с любым растворителем разрешена, если в кружке буква «А» (легко запомнить по ассоциации со словом «all»). Возможны и другие варианты допустимых к применению средств:

  • «P» – углеводород, хлорный этилен, монофлотрихлорметан;
  • «H» – углеводород , трифлотрихлорметан.

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

Правила ухода

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

Сушка

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

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

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

Глажка

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

Уход

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

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

Как часто следует использовать пропитку? Идеальный вариант – после каждой стирки. Если нет такой возможности, препарат стоит применить тогда, когда ткань начинает терять свои характеристики.

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

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

Поделиться
Класснуть
Поделиться
Твитнуть
Запинить

DRY не просто принцип для педантов

 Сегодня даже джин может быть DRY!

DRY — это не то, что вам стоит уважать только в своём коде. Не нужно повторять знания в каждом аспекте вашего проекта. Снова процитирую Дэйва Томаса: «Понятие «знания» в системе охватывает далеко не только код. Оно относится и к схемам баз данных, планам тестирования, системе сборки и даже документации».

Суть DRY проста: не нужно обновлять параллельно несколько вещей, если вносится какое-то изменение.

Если ваше знание дважды повторяется в коде, и вы забыли обновить одно представление, то возникнут баги. Это приведёт к заблуждениям и недоразумениям в документации, и к совершенно ошибочной реализации. И так далее, и тому подобное.

Все определения ADD

Акроним Определение
ADD Advanced Digital Design
ADD Airstream направление детектор
ADD Ataturkcu Dusunce Дернеги
ADD Автоматизированное проектирование и документация
ADD Автоматизированные распределительное устройство
ADD Аддис-Абеба, Эфиопия — боле
ADD Адрес
ADD Акустическая падение обнаружить
ADD Алгебраическое решение диаграмма
ADD Американцев с инвалидностью решений
ADD Аналоговый/цифровой/цифровой
ADD Аналоговых данных Decommutator
ADD Анг знакомств Даан
ADD Антидемпинговые пошлины
ADD Арифметика, разработали ежедневно
ADD Армия цифровой отдел
ADD Архитектурное определение документа
ADD Архитектурный дизайн документа
ADD Ассоциация pour le Développement Durable
ADD Атрибут инициативе дизайн
ADD Аудио день сон
ADD Аэрозольные распылители директива
ADD Буквенно-цифровой дисплей
ADD В смерти дверь
ADD Действий pour le Développement Durable
ADD Диагностический отдел Эбботт
ADD Дилеры цифровой
ADD Директор по развитию спортсмена
ADD Добавлена мощность для зрения вблизи
ADD Добавление
ADD Добавление или удаление дистрибьютор
ADD Документ описания архитектуры
ADD Документ подробно архитектура
ADD Дополнение
ADD Дополнительные
ADD Драйвер адаптера устройства
ADD Еще одна трагедия знакомства
ADD Каталог данных окружающей среды Арктики
ADD Накопленная степень дней
ADD Области развития района
ADD Определение автономного динамика
ADD Отдел сельскохозяйственного развития
ADD Отказ американской мечты
ADD Открытие дополнительных драйверов
ADD Плотность фактическая доставка
ADD Помощник заместителя директора
ADD Помощник окружного директора
ADD Приемлемые отсроченных дефект
ADD Принятие решений по проблемам инвалидности и развития
ADD Приобретение документа определения
ADD Проектирование архитектуры и разработка
ADD Район обороны воздуха
ADD Распределение документов
ADD Расстояние Среднее падение
ADD Расширенные подземелья и драконы
ADD
ADD Сельское хозяйство et Développement Durable
ADD Синдром дефицита внимания
ADD Словарь американский диалект
ADD Словарь данных армии
ADD Случайная смерть или расчленения
ADD Современных лекарств
ADD Средняя суточная доза
ADD Старение & инвалидности Департамента
ADD Уполномоченные производные Declassifier
ADD Уполномоченные развития отклонение
ADD Управление отклонениями
ADD Ускорение Driven демпфирования
ADD Устройство акустического обмана
ADD Устройство определения отношения
ADD назначить онлайн-диагностики

DRY и дублирование кода

Так значит DRY относится к knowledge? К бизнес-логике?

Начнём с очевидного:

Этот код выглядит недурно, правда?

Однако Лёха, твой коллега-разработчик, с вами не согласится. Когда Лёха увидит этот код, подойдёт к вашему столу и возмутится:

  1. Слово повторяется 6 раз.
  2. Метод повторяется в интерфейсе, в реализации, и вызывается во время runtime.

Лёха — начинающий эксперт в вашей компании, и не имеет понятия об ООП.

Я прямо вижу, как вы, замечательный разработчик, смотрите на Лёху, словно опытный садовник на личинку, и отвечаете:

  1. Это переменная (и свойство), и вам нужно повторять её в коде.
  2. Однако логика (отображения цены) представлена однократно, в самом методе. Здесь не повторяется ни знание, ни алгоритм.

Здесь никак не нарушается принцип DRY. Лёха затыкается, подавленный вашей аурой величия, заполняющей комнату. Но вы поставили под сомнение его знания, и он злится. Лёха гуглит приницп DRY, находит другой пример вашего кода, возвращается и тычет вам в лицо:

Лёха торжествующе восклицает: «Ты олень! Этот код не соответствует DRY!». А вы, прочитав эту статью, отвечаете: «Но бизнес-логика и знание всё ещё не повторяются!»

Вы снова правы. Метод проверяет результат парсинга CSV только в одном месте (). Это знание, и оно не повторяется.

Но Лёха не готов смириться с поражением. «А что насчёт всех этих ? Разве это не очевидное нарушение DRY?». Вы контролируете свой голос, тщательно выговариваете каждое слово, и ваша мудрость отражается от стен, создавая эхо осознания: «Ну… нет. Это не нарушение. Я бы назвал это ненужным дублированием кода, а не нарушением принципа DRY».

Вы молниеносно набираете код:

Выглядит лучше, верно?

Подведём итог:

  1. Дублирование знания всегда является нарушением принципа DRY. Хотя можно представить ситуацию, когда это не так (напишите в комментах, если у вас тоже есть такие примеры).
  2. Дублирование кода не обязательно является нарушением принципа DRY.

Но Лёха ещё не убеждён. Со спокойствием высшего духовного наставника, вы ставите точку в споре: «Многие думают, что DRY запрещает дублировать код. Но это не так. Суть DRY гораздо глубже».

Кто это сказал? Дэйв Томас, один из авторов The Pragmatic Programmer, книги, в которой дано определение самого принципа DRY!

DRY это принцип

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

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

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

В разработке у всего есть цена. И DRY не исключение. Очевидно, что не стоит везде повторять бизнес-логику, но также не нужно и тесно объединять всё подряд, экономя на абстракциях. Необходимо искать баланс, который зависит от текущей ситуации.

Вы можете помочь и перевести немного средств на развитие сайта

Не повторяйте свои знания

Хотя фраза «не повторяйся» звучит очень просто, в то же время она слишком общая.

В книге The Pragmatic Programmer принцип DRY определяется как «Каждая часть знания должна иметь единственное, непротиворечивое и авторитетное представление в рамках системы».

Всё замечательно, но… что такое «часть знания»?

Я бы определил это как любую часть предметной области бизнеса или алгоритма.

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

Следовательно, логика работы класса должна появляться в приложении однократно.

Причина очевидна: допустим, вам нужно отправить груз на склад. Для этого придётся активировать логику отгрузки в 76 разных местах приложения. Без проблем: вставляем логику 76 раз. Через некоторое время приходит начальник и просит кое-что изменить в логике: вместо одного склада компания теперь распределяет товары по трём складам. В результате вы потратите кучу времени на изменение логики, поскольку вам придётся сделать это в 76 местах! Совершенно впустую потраченное время, хороший источник багов и прекрасный способ выбесить начальство.

Решение? Создайте единственное представление вашего знания. Положите куда-нибудь логику отправки товара на склад, а затем используйте представление этого знания везде, где нужно. В ООП отправка груза может быть методом класса , который вы можете использовать по своему усмотрению.

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

Применяем DRY везде рецепт катастрофы

Бесполезные абстракции

Возьмём более жизненный, интересный пример. Сейчас я работаю над приложением для компании, занимающейся производством фильмов. В него можно легко загружать сами фильмы и метаданные (заголовки, описания, титры…). Всё эта информация затем отображается в VoD-платформе. Приложение построено на основе паттерна MVC, и выглядит оно так:

Но создавать с помощью этого приложения контент могут не только съёмочные группы. К примеру, им может воспользоваться и команда по управлению контентом в моей компании. Почему? Некоторые съёмочные группы не хотят этим заниматься. У съёмочной команды и команда по управлению контентом совершенно разные потребности. Вторые работают с CMS, а первые — нет.

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

Выглядит как очевидное и уродливенькое нарушение принципа DRY: повторяются представления (view) и контроллер.

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

Более того, контроллеры не должны содержать в себе бизнес-логику. Если вспомните определение DRY, то это как раз знание, которое не стоит дублировать.

Иными словами, если пытаться везде применять DRY, то можно прийти к одному из двух:

  1. Ненужному объединению.
  2. Ненужной сложности.

Очевидно, что ни то, ни другое вам не улыбается.

Преждевременная оптимизация

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

Если вы начинаете что-то абстрагировать, потому что «позже это может понадобиться», то не делайте этого. Почему?

  1. Вы потратите время на абстрагирование того, что потом может быть никогда не востребовано. Бизнес-потребности могут изменять очень быстро и очень сильно.
  2. Повторюсь, вы можете привнести в код сложность и объединение ради… пшика.

Многократное использование кода и дублирование кода — разные вещи. DRY гласит, что не нужно дублировать знания, а не что нужно всегда делать код многократно используемым.

Сначала напишите код, отладьте его, а затем уже держите в уме все эти принципы (DRY, SOLID и прочие), чтобы эффективно рефакторить код. Работать с нарушением принципа DRY нужно тогда, когда знание уже дублировано.

Дублирование знания?

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

Пример:

Вы уже слышите, как ваш коллега Лёха нежно вопит вам в ухо: «Это очевидное нарушение всего, во что я верю! А как же принцип DRY? У меня сердце сжимается!».

Но Лёха снова ошибается. С точки зрения электронной коммерции, время доставки товара покупателю () не имеет отношения к сроку возврата товара покупателем ().

Это две разные функциональности. То, что выглядит дублированием кода, на самом деле чистое совпадение. Что произойдёт, если вы объедините два метода в один? Если ваша компания решит, что покупатель теперь может вернуть товар в течение месяца, то вам снова придётся разделить метод. Ведь если этого не сделать, то срок доставки товара тоже будет составлять один месяц!

А это не лучший способ завоевать лояльность клиентов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *