Соглашение по конфигурации (также известное как кодирование по соглашению ) - это парадигма проектирования программного обеспечения, используемая программными средами, которая пытается уменьшить количество решений, которые разработчик, использующий структуру, должен принимать, не обязательно теряя гибкость. Эта концепция была введена Дэвидом Хайнемайером Ханссоном для описания философии веб-фреймворка Ruby on Rails , но связана с более ранними идеями, такими как концепция «разумных значений по умолчанию » и принцип наименьшего удивления в дизайне пользовательского интерфейса .
По сути, эта фраза означает, что разработчику нужно только указать нетрадиционные аспекты приложения. Например, если в модели есть класс « Продажи», соответствующая таблица в базе данных по умолчанию называется «продажи». Только если кто-то отклоняется от этого соглашения, такого как таблица «продажи продукта», нужно писать код для этих имен.
Когда соглашение, реализованное инструментом, соответствует желаемому поведению, оно ведет себя так, как ожидалось, без необходимости записывать файлы конфигурации. Только когда желаемое поведение отклоняется от реализованного соглашения, требуется явная конфигурация.
Использование этой фразы в Ruby on Rails особенно сосредоточено на его файле проекта и структуре каталогов по умолчанию, что избавляет разработчиков от необходимости писать файлы конфигурации XML, чтобы указать, какие модули должен загружать фреймворк, что было распространено во многих более ранних фреймворках.
Недостатки подхода к соглашению по сравнению с подходом к конфигурации могут возникать из-за конфликтов с другими принципами проектирования программного обеспечения, такими как дзен Python «явное лучше, чем неявное». Рамки программного обеспечения на основе конвенции по конфигурации часто включает в себя язык домен специфичного с ограниченным набором конструкций или инверсией управления , в которой разработчик может воздействовать только на поведение , используя ограниченный набор крючков , оба из которых может сделать реализующее поведение не легко выражаться в предоставленных соглашениях труднее, чем при использовании программной библиотеки , которая не пытается уменьшить количество решений, которые разработчики должны принимать или требовать инверсии управления.
Другие методы уменьшения количества решений, которые необходимо принять разработчику, включают идиомы программирования и библиотеки конфигурации с многоуровневой архитектурой .
Мотивация
Некоторым фреймворкам требуется несколько файлов конфигурации, каждый со множеством настроек. Они предоставляют информацию, специфичную для каждого проекта, от URL-адресов до сопоставлений между классами и таблицами базы данных. Многие файлы конфигурации с множеством параметров часто трудно поддерживать.
Например, ранние версии Java-средства отображения сохраняемости Hibernate отображали сущности и их поля в базу данных, описывая эти отношения в файлах XML. Большая часть этой информации могла быть раскрыта путем традиционного сопоставления имен классов с одноименными таблицами базы данных и полей с их столбцами, соответственно. Более поздние версии отказались от файла конфигурации XML и вместо этого использовали эти самые соглашения, отклонения от которых можно указать с помощью аннотаций Java (см. Спецификацию JavaBeans, ссылку ниже).
Применение
Многие современные фреймворки используют подход к конфигурации, а не соглашению .
Однако эта концепция старше, восходит к концепции по умолчанию и может быть обнаружена совсем недавно в корнях библиотек Java . Например, спецификация JavaBeans сильно зависит от этого. Процитируем спецификацию JavaBeans 1.01: [1]
«Как правило, мы не хотим изобретать огромный класс java.beans.everything, от которого люди должны наследовать. Вместо этого мы хотели бы, чтобы среда выполнения JavaBeans обеспечивала поведение по умолчанию для« нормальных »объектов, но позволяла объектам переопределить заданную часть поведения по умолчанию, унаследовав от определенного интерфейса java.beans.something. "
Смотрите также
Рекомендации
- ↑ Вс (24 июля 1997 г.). Спецификация JavaBeans. Архивировано 6 апреля 2012 г. на Wayback Machine , раздел 1.4.
- Бахл, М., и Кирхберг, П. (2007). "Рубин на рельсах". Программное обеспечение IEEE, 24 (6), 105-108. DOI 10.1109 / BCI.2009.31 .
- Миллер, Дж. (2009). «Дизайн для соглашения по конфигурации». Microsoft, последнее обращение 18 апреля 2010 г.
- Чен, Николас (2006). «Соглашение важнее конфигурации».