Что такое Convention over Configuration?

3

Что такое Convention over Configuration (CoC)? Для чего применяется этот принцип.

Новые ответы

Новые Лучшие

2

Сonvention over Сonfiguration — это принцип построения фреймворков и библиотек, призванный сократить количество требуемой конфигурации без потери гибкости. Обычно переводится как «соглашения по конфигурации». В строгой форме этот принцип можно выразить так: аспект программной системы нуждается в конфигурации тогда и только тогда, когда этот аспект НЕ удовлетворяет некоторой спецификации. Принцип работает когда речь идет о меппинге классов на какие-либо ресурсы (таблицы базы данных, события, ресурсы файловой системы). Согласно принципу, если класс соответствует соглашению наименования, тогда он не нуждается в дополнительной конфигурации. В этом контексте название принципа можно перевести как «Соглашение НАД конфигурацией», такой перевод указывает на первостепенность соглашения, а не конфигурации.

Классический пример CoC принципа — Hibernate. В Hibernate правила объектно-реляционного меппинга можно описывать с помощью XML-файлов:

<class name="Tag" table="tag">
    <property name="Name" column="name"/>        
    <property name="Value" column="value"/>        
    <property name="Value2" column="value2"/>
    <property name="Value3" column="value3"/>
</class>

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

<class name="Tag">
    <property name="Name"/>        
    <property name="Value"/>        
    <property name="Value2"/>
    <property name="Value3"/>
</class>

Однако, если какое-то свойство потребуется сохранить в колонку с отличным именем, это придется указать явно. В этом и состоит суть принципа.

Наибольшее применение принцип CoC находит в среде Ruby on Rails. Это в принципе понятно, если учесть, что ror ориентирована на быструю разработку, а coc позволяет свести конфигурацию к минимуму.


v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.