Convention over configuration — принцип програмування («угода головніша за конфігурацію», також відома як програмування за угодою). Він використовується у програмних фрейворках, щоб зменшити кількість рішень, які мусить приймати в роботі програміст, без втрати гнучкості архітектури створюваного додатку. Підхід було запропоновано Ханссон Давидом Хейнемейером щоб описати філософію фреймворку Ruby on Rails.

Одним словом — програміст має описувати лише ту частину коду, яка не підпадає під угоду про іменування і розміщення (файлів). Для прикладу, якщо є клас-модель Sales, то в базі даних йому відповідатиме таблиця «sales» за умовчанням. І тільки якщо треба змінити ім'я таблиці (на «product sales» наприклад) програміст має вказати ім'я таблиці описуючи клас моделі.

Якщо всі частини додатку іменовані згідно угоди, то система має працювати без жодного рядку конфігураційного коду. І тільки якщо треба змінити розташування якихось елементів системи, програміст має сконфігурувати систему.

Використання цього принципу суперечить пайтонівському «явне краще ніж неявне» (англ. explicit is better than implicit). Фреймворк, що базується на Convention over configuration як правило надає свою «мову» (предметно-орієнтована мова програмування) для конфігурування системи, а також використовує шаблон інверсії керування у якому коли програміст має втілити вузький набір викликів — перехоплень.

Засобами, що звільняють програмістів від прийняття зайвих рішень, є також використання ідіом програмування (programming idioms[en]) та конфігураційних бібліотек з багатошаровою архітектурою (multilayered architecture[en]).

Мотивація ред.

Деякі фреймворки вимагають великої кількості конфігураційних файлів. Вони містять інформацію, що є специфічною для кожного проекту — роутінги, маппінг БД. Таку кількість файлів з параметрами часто важко підтримувати.

Для прикладу, ранні версії Java використовують Hibernate, що об'єднує об'єкти в БД через конфігураційні XML файли. Більшість інформації, що має бути сконфігурована береться з угоди про іменування.

Використання ред.

Багато сучасних фреймворків використовують даний принцип.

Примітки ред.

  • Bachle, M., & Kirchberg, P. (2007). «Ruby on rails». Software, IEEE, 24(6), 105—108. DOI 10.1109/BCI.2009.31.
  • Miller, J. (2009). «Design For Convention Over Configuration». Microsoft, Retrieved 18 April 2010.
  • Chen, Nicholas (2006). «Convention over configuration».

Посилання ред.