📘 11.5 – Katmanlar Arası Görev Paylaşımı
🔹 Açıklama:
Katmanlı mimarinin en önemli avantajlarından biri, kodun sorumluluklara göre ayrılmasıdır. Bu görev paylaşımı sayesinde yazılım hem temiz kalır hem de bakımı ve test edilmesi kolaylaşır.
Aşağıda üç temel katman için görev dağılımı özetlenmiştir:
🧱 1. Entity Katmanı (Veri Tanımı):
- Yalnızca veri tutar
- Özelliklerle tanımlanır (Ad, Fiyat, Numara vb.)
- Getter ve Setter’lar içerir
- İş mantığı barındırmaz
🧠 2. Business Katmanı (İş Mantığı):
- Veri ile ne yapılacağını belirler
- Ekleme, silme, güncelleme, filtreleme işlemleri burada yapılır
- Listeleme ve hesaplama gibi işlemleri üstlenir
- Validasyon ve iş kurallarını barındırır
🖥️ 3. UI Katmanı (Kullanıcı Arayüzü):
- Kullanıcıdan giriş alır
- Business katmanındaki metotları çağırır
- Sonuçları kullanıcıya sunar
- Karar vermez, sadece yönlendirir
🧩 Örnek Görev Dağılımı Tablosu:
Görev | Katman |
---|---|
Ogrenci sınıfını tanımlama | Entity |
OgrenciEkle() metodu | Business |
TextBox ile veri alma | UI |
ListBox’ta veriyi listeleme | UI |
Ortalama hesaplama | Business |
Butona tıklama olayı | UI |
🎯 Kazanımlar:
Bu başlık sonunda öğrenci:
- Katmanların rolünü kesin olarak ayırt edebilir
- Kodu bölerek yazmanın avantajlarını kavrar
- Bakımı ve güncellenmesi kolay uygulamalar geliştirebilir
- Sınıf ve fonksiyonların görevlerine sadık kalmayı öğrenir
🧪 11.5 – Katmanlar Arası Görev Paylaşımı: 5 Uygulamalı Örnek
📌 Örnek 1: Öğrenci Kayıt Sistemi
✅ Entity:
public class Ogrenci
{
public string Ad { get; set; }
public int Numara { get; set; }
}
✅ Business:
public class OgrenciBusiness
{
private static List<Ogrenci> ogrenciler = new();
public static void Ekle(Ogrenci o)
{
if (o.Numara > 0)
ogrenciler.Add(o);
}
public static List<Ogrenci> Listele() => ogrenciler;
}
✅ UI:
private void btnEkle_Click(object sender, EventArgs e)
{
Ogrenci o = new()
{
Ad = txtAd.Text,
Numara = Convert.ToInt32(txtNumara.Text)
};
OgrenciBusiness.Ekle(o);
}
📌 Örnek 2: Maaş Artış Sistemi
✅ Entity:
public class Personel
{
public string Ad { get; set; }
public decimal Maas { get; set; }
}
✅ Business:
public class PersonelBusiness
{
private static List<Personel> liste = new();
public static void ZamYap(decimal oran)
{
foreach (var p in liste)
p.Maas += p.Maas * oran / 100;
}
public static List<Personel> Listele() => liste;
public static void Ekle(Personel p) => liste.Add(p);
}
✅ UI:
private void btnZam_Click(object sender, EventArgs e)
{
decimal oran = Convert.ToDecimal(txtZamOrani.Text);
PersonelBusiness.ZamYap(oran);
}
📌 Örnek 3: Giriş Kontrolü
✅ Entity:
public class Kullanici
{
public string KullaniciAdi { get; set; }
public string Sifre { get; set; }
}
✅ Business:
public class KullaniciBusiness
{
private static List<Kullanici> kullanicilar = new()
{
new() { KullaniciAdi = "admin", Sifre = "1234" }
};
public static bool Dogrula(string ad, string sifre)
{
return kullanicilar.Any(x => x.KullaniciAdi == ad && x.Sifre == sifre);
}
}
✅ UI:
private void btnGiris_Click(object sender, EventArgs e)
{
bool giris = KullaniciBusiness.Dogrula(txtAd.Text, txtSifre.Text);
MessageBox.Show(giris ? "Giriş Başarılı" : "Hatalı!");
}
📌 Örnek 4: Ortalama Not Hesabı
✅ Entity:
public class Not
{
public string DersAdi { get; set; }
public double Puan { get; set; }
}
✅ Business:
public class NotBusiness
{
private static List<Not> notlar = new();
public static void Ekle(Not n) => notlar.Add(n);
public static double Ortalama() => notlar.Any() ? notlar.Average(x => x.Puan) : 0;
}
✅ UI:
private void btnOrtalama_Click(object sender, EventArgs e)
{
lblSonuc.Text = "Ortalama: " + NotBusiness.Ortalama().ToString("0.00");
}
📌 Örnek 5: Ürün Filtresi
✅ Entity:
public class Urun
{
public string Ad { get; set; }
public double Fiyat { get; set; }
}
✅ Business:
public class UrunBusiness
{
private static List<Urun> urunler = new();
public static void Ekle(Urun u) => urunler.Add(u);
public static List<Urun> FiyatFiltrele(double max) =>
urunler.Where(x => x.Fiyat <= max).ToList();
}
✅ UI:
private void btnFiltrele_Click(object sender, EventArgs e)
{
double sinir = Convert.ToDouble(txtFiyat.Text);
lstSonuc.Items.Clear();
foreach (var u in UrunBusiness.FiyatFiltrele(sinir))
lstSonuc.Items.Add($"{u.Ad} - {u.Fiyat}₺");
}
✅ Özet:
Bu örneklerle öğrenci:
- Görev paylaşımını kod düzeyinde net şekilde öğrendi
- Katmanların birbirine karışmadığı yapıları inceledi
- Gerçek hayatta kullanılabilecek pratik sistemler kurmayı deneyimledi