Don’t repeat yourself

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Don’t repeat yourself, DRY (рус. не повторяйся) — это принцип разработки программного обеспечения, нацеленный на снижение повторения информации различного рода, особенно в системах со множеством слоёв абстрагирования. Принцип DRY формулируется как: «Каждая часть знания должна иметь единственное, непротиворечивое и авторитетное представление в рамках системы»[1]. Он был сформулирован Энди Хантом (англ.) и Дэйвом Томасом (англ.) в их книге The Pragmatic Programmer (англ.). Они применяли этот принцип к «схемам баз данных, планам тестирования, сборкам программного обеспечения, даже к документации»[2]. Когда принцип DRY применяется успешно, изменение единственного элемента системы не требует внесения изменений в другие, логически не связанные элементы. Те элементы, которые логически связаны, изменяются предсказуемо и единообразно. Помимо использования методов и функций в коде, Томас и Хант считают необходимым использование генераторов кода, автоматических систем компиляции.

Применение принципа DRY[править | править код]

Принцип DRY, известный также как Single Source of Truth (англ.), превалирует в системах с управляемой моделями архитектурой, в которых артефакты программы извлекаются из главной модели объекта и выражаются в такой форме, как UML. Код, написанный по принципу DRY, создаётся с помощью конвертации данных и генераторов кода, которые позволяют разработчику ПО избежать операций вырезания, копирования и вставки. Обычно код, написанный по этому принципу, позволяет легче управлять большими информационными системами. Такие инструменты, как XDoclet (англ.) и XSLT являются примерами техник программирования DRY. Примерами систем, которые требуют дублирования информации, являются Enterprise Java Beans версии 2, которая требует не только дублирования в коде Java, но и в файлах конфигурации.

Примерами систем, в которых сделана попытка устранить дублирование информации, являются[источник не указан 1443 дня] фреймворки Symfony, web2py, Yii, Django, Ruby on Rails[3][4], Phalcon, а также среды разработки Visual Studio LightSwitch и Enterprise Java Beans версии 3.

DRY и WET[править | править код]

Нарушения принципа DRY называют WET — «Write Everything Twice» (рус. Пиши всё по два раза)[5] или «We enjoy typing» (Нам нравится печатать). Это игра английских слов «dry» (рус. сухой) и «wet» (рус. влажный).

Случаи, когда DRY вреден[править | править код]

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

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

Другой пример отказа от DRY - когда Web-клиент (чаще всего - JavaScript-программа, включённая в страницу с формой для ввода данных) проверяет корректность введённых данных до отправки их на Web-сервер. Такая проверка полезна, ибо снижает нагрузку на сервер: запросы с некорректными данными на сервер вообще не отправляются, а проверка происходит оперативно (да хоть после ввода каждого символа).

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

См. также[править | править код]

Примечания[править | править код]

  1. Джереми Миллер. The Don’t Repeat Yourself Principle and the Wormhole Anti-Pattern (англ.) (22 марта 2007). Дата обращения 23 августа 2012 года. Архивировано 29 октября 2012 года.
  2. Дэйв Томас (интервью провёл Билл Веннерс). Orthogonality and the DRY Principle (англ.) (10 октября 2003). Дата обращения 23 августа 2012. Архивировано 29 октября 2012 года.
  3. DRY--Don't Repeat Yourself (англ.). About.com. Дата обращения 23 августа 2012 года. Архивировано 29 октября 2012 года.
  4. Sam Ruby, Dave Thomas. Agile Web Development with Rails. — Pragmatic Programmers, LLC., 2011. — P. 17.
  5. Алекс Пападимулис. The WET Cart (англ.) (12 августа 2011). Дата обращения 21 мая 2012 года. Архивировано 29 октября 2012 года.

Ссылки[править | править код]