Convention over Configuration (CoC) Nedir?
Konfigürasyon, günlük hayatımızın önemli bir parçası. Uygulamaların değişebilecek parametrelerini ayırıp konfigürasyon dosyalarına taşıyarak, aslında iyi bir iş yapıyoruz. Özgür kalması gereken verileri “hard coded” diye tâbir edilen mahpusluktan kurtarıyoruz.
Ancak yazılım geliştirme dünyasında, yeni olmayan bir görüş, konfigürasyonu en aza indirmeyi ve geleneği yüceltmeyi öneriyor. Bu görüşün adı “convention over configuration”, yani “teâmül konfigürasyondan önce gelir”. Mesleki karşılığını da buraya not düşmek istersek “uygulama ayarlarını harici dosyalara değil de kod içerisine yazmak”. Bu yeni olmayan tasarım görüşü bilhassa konfigürasyon cehennemini yaşadığımız/yaşayabileceğimiz uygulamalarda hayli önemli hâle geldi.
Teâmül ve kodlama arasında nasıl bir ilişki var?
Vereceğimiz örnek sanırım çok vurucu olacak. Amerika’da kapıların bir açılma teâmülü var. Eğer içeriden dışarı çıkıyorsanız kapıyı iterek açıyorsunuz. Dışarıdan geliyorsanız çekerek açıyorsunuz. Binanın dış kapısı, odaların kapısı, daire kapıları, alış veriş yeri kapıları… hepsi aynı teâmülü uyguluyor. Şayet bir robota şöyle bir gez gel deseniz ve bu teâmülü de anlatsanız, kapıları kimseye bir şey sormadan açıverecektir. İçeride ise itecek, dışarıda ise çekecek neticede amacına ulaşacaktır.
Memleketimize gelelim. Kapıların açılmasıyla ilgili bir teâmül bulunmamaktadır. Önünüzdeki kapı her türlü açılabilir. Peki aynı robota gel bir de bizim memleketi gez deseniz… kapıları nasıl açacaktı? Biz proaktif davranıp geçeceği tüm kapıların açılma şeklini konfigürasyonla bildirecektik ki arıza çıkmasın. Evet, konfigürasyon buydu. Teâmül ise üst satırdaydı. Demek ki teâmül, bizi bir yığın konfigürasyondan kurtaran esaslı bir araç.
Bir örnek de yazılım dünyasından verelim. WordPress uygulamasının plug-ins dizinine koyulan bir plug-in’i tanıması ve hemen yönetim panelinde pasif olarak göstermesi, basit bir teâmülün neticesidir. Aynı şekilde “themes” klasörü altına giren bir tema paketi de uygulama tarafından hemen gündeme alınır. Siz ayrı bir merciye gidip, ben şuraya şunu koymuştum, o da bizim tema olur, ne olur işleme koyun diye ısrarlara gark olmazsınız.
Güncel bir yazılım örneği verelim: MEF. Microsoft’un tak çalıştır modüller kurgulamak için oluşturduğu alt yapı, Managed Extensibility Framework. MEF, sonuna kadar “convention” bazlı çalışıyor ve çok az konfigürasyona ihtiyaç duyuyor. Çok güzel bir örnek.
Şimdi ne yapabiliriz?
Bir bilgiyi konfigürasyona taşıma kararı almadan önce, bunu nasıl “teâmül”e bağlarız diye bir düşünelim. Ancak ön tanımlı teâmülü de her zaman konfigure edilebilir yaparak, durumu kaymaklı ekmek kadayıfı kıvamına getirebiliriz.
Günümüzde bu görüşü ağırlı olarak uygulayan bir Ruby on Rails framework’ü var. Onu inceleyerek, olmadı ondan hayli esinlenmiş olan ASP.NET MVC‘yi inceleyerek felsefeye vâkıf olabiliriz.
“CoC” size çok bir şey vaad etmeyecek. Fakat sizi, konfigürasyonların karmaşık ortamlarından ve azabından bir nebze olsun kurtaracaktır.
1 Comment
Ömer
19 Mayıs 2017 at 15:38Yazılarınız çok etkileyici ve akıcı. Sürekli yazmanız temennisiyle…