Don’t repeat yourself (DRY; с англ. — «не повторяйся») — это принцип разработки программного обеспечения, нацеленный на снижение повторения информации различного рода, особенно в системах со множеством слоёв абстрагирования. Принцип DRY формулируется как: «Каждая часть знания должна иметь единственное, непротиворечивое и авторитетное представление в рамках системы»[1]. Он был сформулирован Энди Хантом (англ.) и Дэйвом Томасом в их книге The Pragmatic Programmer (англ.). Они применяли этот принцип к «схемам баз данных, планам тестирования, сборкам программного обеспечения, даже к документации»[2]. Когда принцип DRY применяется успешно, изменение единственного элемента системы не требует внесения изменений в другие, логически не связанные элементы. Те элементы, которые логически связаны, изменяются предсказуемо и единообразно. Помимо использования методов и функций в е, Томас и Хант считают необходимым использование генераторов а, автоматических систем компиляции.
Принцип DRY, известный также как единственный источник истины (англ.), превалирует в системах с управляемой моделями архитектурой, в которых артефакты программы извлекаются из главной модели объекта и выражаются в такой форме, как UML. , написанный по принципу DRY, создаётся с помощью конвертации данных и генераторов а, которые позволяют разработчику ПО избежать операций вырезания, копирования и вставки. Обычно , написанный по этому принципу, позволяет легче управлять большими информационными системами. Такие инструменты, как XDoclet (англ.) и XSLT являются примерами техник программирования DRY. Примерами систем, которые требуют дублирования информации, являются Enterprise Java Beans версии 2, которая требует не только дублирования в е Java, но и в файлах конфигурации.
Примерами систем, в которых сделана попытка устранить дублирование информации, являются[источник не указан 1952 дня] фреймворки Symfony, web2py, Yii, Django, Ruby on Rails[3][4], Phalcon, а также среды разработки Visual Studio LightSwitch и Enterprise Java Beans версии 3.
Нарушения принципа DRY называют WET — «Write Everything Twice» (рус. Пиши всё по два раза)[5] или «We enjoy typing» (Нам нравится печатать). Это игра английских слов «dry» (рус. сухой) и «wet» (рус. влажный).
Возможно, этот раздел содержит оригинальное исследование. Добавьте ссылки на источники, в противном случае он может быть удалён. Дополнительные сведения могут быть на странице обсуждения. (24 марта 2020) |
Существуют системы реального времени, для которых задержки при передаче данных по сети являются критичными. Наиболее известный пример - это многопользовательские игры: «стрелялки» и некоторые стратегические игры, в которых существенное изменение ситуации может происходить за время менее одной десятой секунды. В этих случаях клиент вынужден самостоятельно дублировать вычисления, которые делает сервер.[источник не указан 388 дней]
Важной проблемой при этом является рассинхронизация клиента и сервера - когда сервер получил сообщения о действиях второго игрока, но ещё не успел передать эти сведения первому, компьютер первого игрока будет показывать положение второго игрока так, как будто тот не совершил никаких действий. А когда сервер всё-таки сообщит компьютеру первого игрока о действиях второго игрока - первый игрок увидит, как у него на экране второй игрок мгновенно переместится из вычисленного положения в истинное.[источник не указан 388 дней]
Другой пример отказа от DRY - когда Web-клиент (чаще всего - JavaScript-программа, включённая в страницу с формой для ввода данных) проверяет корректность введённых данных до отправки их на Web-сервер. Такая проверка полезна, ибо снижает нагрузку на сервер: запросы с некорректными данными на сервер вообще не отправляются, а проверка происходит оперативно.[источник не указан 388 дней]
Однако, проверку данных на клиенте можно отключить; ну или можно настроить отправку данных не из браузера, а из другой программы, благо сервер в принципе не способен проверить, какая программа отправила ему данные. Поэтому данные, которые получает сервер - всё равно обязаны быть проверены на сервере (ибо сервер является доверенной платформой). Отказ от проверки данных на сервере - это грубейшее нарушение базовых принципов информационной безопасности. Соответственно, проверку вводимых пользователем данных имеет смысл выполнять дважды.[источник не указан 388 дней]