Ana içeriğe geç

İ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.

Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/separation-of-concerns

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

Karışık ve ayrılmış ilgilerjavascript
// 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

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar