İlgilerin Ayrılması
- İngilizcesi
- Separation of Concerns
- Türkçe karşılığı
- sorumlulukların ayrılması
- Okunuşu
- sepıreyşın ov kınsörnz
Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.
Kısaca
İlgilerin ayrılması, bir programı her biri davranışının açıkça tanımlanmış tek bir yönünden sorumlu ayrı parçalara bölen bir tasarım ilkesidir.
İlgilerin ayrılması (separation of concerns) nedir?
İlgilerin ayrılması, kodu her parça verinin gösterilmesi, iş kurallarının uygulanması ya da veritabanına kaydetme gibi tek bir ilgiyle, yani tek bir sorumluluk alanıyla uğraşacak şekilde düzenlemek demektir. Terimi bilgisayar bilimci Edsger W. Dijkstra 1974'te ortaya atmıştır. İlgiler ayrıldığında, diğerlerini düşünmek zorunda kalmadan bir parçayı anlayabilir, değiştirebilir ya da test edebilirsiniz.
İlke, yazılımın her düzeyinde karşımıza çıkar. Web'de HTML yapıyı, CSS sunumu, JavaScript ise davranışı üstlenir; uygulamalarda MVC gibi desenler veriyi, gösterimi ve girdi işlemeyi ayırır; daha büyük sistemlerde ayrı servisler ayrı iş yeteneklerini yönetir. En küçük düzeyde, tek bir işi iyi yapan bir fonksiyon ilgilerin ayrılmasının uygulamadaki hâlidir.
Restoran mutfağı iyi bir benzetmedir: bir istasyon salata hazırlar, biri ızgara yapar, bir diğeri tatlı yapar. Her aşçı tek bir işe odaklanabilir, ızgaradaki bir sorun tatlıları mahvetmez ve herkesi yeniden eğitmeden bir istasyon iyileştirilebilir. Kodda aynı ayrım, veritabanı katmanındaki bir değişikliğin kullanıcı arayüzünün yeniden yazılmasını gerektirmemesi demektir.
İlgilerin ayrılması, aynı fikri özellikle sınıflara ve modüllere uygulayan SOLID'deki Tek Sorumluluk İlkesi'nden daha geniştir. Ayrıca dosya türlerini kendi başına ayırmakla ilgili değildir: bileşen tabanlı framework'ler çoğunlukla bir bileşenin işaretlemesini, stillerini ve mantığını bir arada tutar, çünkü ilgi bileşenin kendisidir. Amaç, parçalar arasında düşük bağlılık (coupling) ve her parçanın içinde yüksek uyum (cohesion) sağlamaktır.
Önemli noktalar
- Bir programın her parçası tek bir ilgiyi, yani sorumluluğu yönetmelidir.
- Kodu anlamayı, test etmeyi, değiştirmeyi ve yeniden kullanmayı kolaylaştırır.
- Her düzeyde geçerlidir: fonksiyonlar, modüller, katmanlar ve servisler.
- Tek Sorumluluk İlkesi bu fikrin belirli bir biçimidir.
- Parçalar arasında düşük bağlılık, parçaların içinde yüksek uyum hedefleyin.
Örnek
// Mixed concerns: fetching, business rules, and display in one function
async function showCartTotalMixed() {
const items = await (await fetch("/api/cart")).json();
const total = items.reduce((sum, item) => sum + item.price * item.qty, 0);
document.querySelector("#total").textContent = total.toFixed(2);
}
// Separated concerns: each function has one job and can be tested on its own
const fetchCart = async () => (await fetch("/api/cart")).json();
const calculateTotal = (items) => items.reduce((sum, i) => sum + i.price * i.qty, 0);
const renderTotal = (total) => (document.querySelector("#total").textContent = total.toFixed(2));
async function showCartTotal() {
renderTotal(calculateTotal(await fetchCart()));
}Sık sorulan sorular
İlgilerin ayrılması ile Tek Sorumluluk İlkesi arasındaki fark nedir?
İlgilerin ayrılması, fonksiyonlardan bütün servislere kadar bir sistemin her düzeyinde geçerli genel bir ilkedir. Tek Sorumluluk İlkesi ise bir sınıf ya da modülün değişmesi için yalnızca tek bir neden olması gerektiğini söyleyen SOLID'deki daha dar bir kuraldır.
İlgilerin ayrılmasına örnek nedir?
Klasik örnek bir web sayfasıdır: HTML yapıyı tanımlar, CSS görünümü kontrol eder, JavaScript davranış ekler. Bir diğeri, veri ve iş kurallarını, sunumu ve girdi işlemeyi ayıran MVC'dir.
İlgilerin ayrılması neden önemlidir?
Bir değişikliğin ne kadar yayılabileceğini sınırlar; böylece sistemin bir bölümünü diğerlerini bozmadan güncelleyebilirsiniz. Her parça kendi başına kontrol edilebildiği için kodu test etmeyi de kolaylaştırır.
İlgili sayfalar
- SOLIDYazılım Mimarisi, s. 39SOLID, geliştiricilerin daha anlaşılır, genişletilebilir, test edilebilir ve bakımı kolay kod yazmasına yardım eden beş nesne yönelimli tasarım ilkesidir.
- MVCYazılım Mimarisi, s. 26MVC, uygulamayı veri ve mantık için Model, gösterim için View ve kullanıcı girdisini yöneten Controller olmak üzere üçe ayıran bir mimari desendir.
- Clean ArchitectureYazılım Mimarisi, s. 5Clean architecture, temel iş kuralları framework'e, veritabanına ya da kullanıcı arayüzüne asla bağımlı olmasın diye yazılımı katmanlara ayırma yöntemidir.
- DRYYazılım Mimarisi, s. 13DRY, her bilgi ya da mantık parçasının çoğaltılmak yerine tek bir yetkili temsile sahip olması gerektiğini söyleyen bir yazılım tasarım ilkesidir.
- FonksiyonProgramlamanın Temelleri, s. 20Fonksiyon, belirli bir işi yapan, isteğe bağlı olarak parametre denen girdiler alıp sonuç döndürebilen, adlandırılmış ve yeniden kullanılabilir kod bloğudur.
- CSSWeb Geliştirme, s. 11CSS, HTML içeriğinin ekranda renk, yazı tipi, boşluk, yerleşim ve animasyon gibi yönlerden nasıl görüneceğini belirleyen stil sayfası dilidir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin