Convention over configuration
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».
- Detailed information on CoC [Архівовано 24 січня 2010 у Wayback Machine.]