📘 11.1 – 3 Katmanlı Yapı Nedir?
🔹 Açıklama:
3 katmanlı mimari, yazılım projelerinde sınıfları görevlerine göre ayırarak düzenli, sürdürülebilir ve kolay yönetilebilir bir yapı kurmayı amaçlar.
Bu yapı genellikle şu katmanlardan oluşur:
- Entity Katmanı: Veriyi tutar, yani sınıf tanımları burada yapılır.
- Business (BLL) Katmanı: İş mantığını barındırır, kurallar burada yazılır.
- UI (User Interface) Katmanı: Kullanıcıyla etkileşim burada gerçekleşir (Form ekranları).
Katmanlar birbirinden bağımsızdır ama belirli bir hiyerarşiyle çalışırlar:
UI ➝ Business ➝ Entity
Bu yapı ile;
- Kodlar okunabilir hâle gelir
- Hatalar kolayca izlenebilir
- Geliştirme ve bakım süreçleri kolaylaşır
- Test yapılabilirliği artar
- Ekip çalışmasına daha uygun hale gelir
🔍 Nerelerde Kullanılır?
- Öğrenci, personel, ürün takip sistemlerinde
- CRM, ERP gibi katmanlı sistemlerde
- Veri girişi ve listeleme işlemi olan her uygulamada
- MVC, MVVM gibi daha büyük mimarilere geçişte temel olarak
🧱 Katman Görevleri:
Katman | Görevi | Örnek |
---|---|---|
Entity | Veri yapısını tanımlar | public class Ogrenci { public string Ad; } |
Business | Kuralları uygular, listeleme, filtreleme yapar | OgrenciListele(), OgrenciEkle() |
UI | Form ekranı, kullanıcı ile iletişim | Button, ListBox, TextBox |
🎯 Kazanımlar:
Bu başlığı tamamlayan öğrenci:
- Katmanlı mimarinin temel mantığını kavrar
- Kodları sorumluluklarına göre nasıl ayıracağını öğrenir
- UI-Business-Entity ilişkisinin ne işe yaradığını kavrar
- Projeye düzen ve genişletilebilirlik kazandırmayı öğrenir
🧪 11.1 – 3 Katmanlı Yapı: Uygulamalı 5 Örnek
📌 Örnek 1: Öğrenci Bilgi Sistemi (Temel Katmanlı Yapı)
➤ Entity Katmanı:
public class Ogrenci
{
public string Ad { get; set; }
public string Soyad { get; set; }
public int Yas { get; set; }
}
➤ Business Katmanı:
public class OgrenciBusiness
{
public static List<Ogrenci> ogrenciler = new List<Ogrenci>();
public static void Ekle(Ogrenci o)
{
ogrenciler.Add(o);
}
public static List<Ogrenci> Listele()
{
return ogrenciler;
}
}
➤ UI Katmanı (Form):
private void btnEkle_Click(object sender, EventArgs e)
{
Ogrenci o = new Ogrenci
{
Ad = txtAd.Text,
Soyad = txtSoyad.Text,
Yas = Convert.ToInt32(txtYas.Text)
};
OgrenciBusiness.Ekle(o);
MessageBox.Show("Öğrenci eklendi!");
}
📝 Açıklama:
Veri tanımı, mantık ve form ayrı katmanlarda tutulmuştur.
📌 Örnek 2: Ürün Stok Takibi
Amaç: Ürünlerin bilgilerini al, listele, UI’de göster.
➤ Entity:
public class Urun
{
public string Ad { get; set; }
public int Adet { get; set; }
}
➤ Business:
public class UrunBusiness
{
private static List<Urun> stok = new List<Urun>();
public static void UrunEkle(Urun u)
{
stok.Add(u);
}
public static List<Urun> Listele()
{
return stok;
}
}
➤ UI (Form):
private void btnListele_Click(object sender, EventArgs e)
{
lstUrunler.Items.Clear();
foreach (var u in UrunBusiness.Listele())
{
lstUrunler.Items.Add($"{u.Ad} - {u.Adet} adet");
}
}
📌 Örnek 3: Kullanıcı Giriş Sistemi
Amaç: Basit kullanıcı doğrulama işlemi
➤ Entity:
public class Kullanici
{
public string KullaniciAdi { get; set; }
public string Sifre { get; set; }
}
➤ Business:
public class KullaniciBusiness
{
private static List<Kullanici> kullanicilar = new List<Kullanici>
{
new Kullanici { KullaniciAdi = "admin", Sifre = "1234" }
};
public static bool Dogrula(string ad, string sifre)
{
return kullanicilar.Any(k => k.KullaniciAdi == ad && k.Sifre == sifre);
}
}
➤ UI:
private void btnGiris_Click(object sender, EventArgs e)
{
if (KullaniciBusiness.Dogrula(txtAd.Text, txtSifre.Text))
MessageBox.Show("Giriş başarılı");
else
MessageBox.Show("Hatalı giriş");
}
📌 Örnek 4: Öğrenci Yaşına Göre Listeleme
Amaç: 18 yaşından büyük öğrencileri listele
➤ Business (ek metot):
public static List<Ogrenci> YasaGoreFiltrele(int minYas)
{
return ogrenciler.Where(o => o.Yas >= minYas).ToList();
}
➤ UI:
private void btnFiltre_Click(object sender, EventArgs e)
{
lstFiltre.Items.Clear();
foreach (var o in OgrenciBusiness.YasaGoreFiltrele(18))
{
lstFiltre.Items.Add(o.Ad + " " + o.Soyad);
}
}
📌 Örnek 5: Katmanlı Yapıya Sahip Mini CRM
Amaç: Personel adı, görev bilgisi ve departmanına göre filtreleme.
➤ Entity:
public class Personel
{
public string Ad { get; set; }
public string Gorev { get; set; }
public string Departman { get; set; }
}
➤ Business:
public class PersonelBusiness
{
private static List<Personel> personeller = new List<Personel>();
public static void Ekle(Personel p)
{
personeller.Add(p);
}
public static List<Personel> DepartmanaGore(string dep)
{
return personeller.Where(p => p.Departman == dep).ToList();
}
}
➤ UI:
private void btnDepListele_Click(object sender, EventArgs e)
{
var liste = PersonelBusiness.DepartmanaGore("Satış");
foreach (var p in liste)
{
lstPersonel.Items.Add(p.Ad + " - " + p.Gorev);
}
}
✅ Özet:
Bu örneklerle öğrenci:
- Katmanların görevlerini ayırt edebilmeyi
- Kod organizasyonunu daha yönetilebilir hale getirmeyi
- Gerçek hayattaki ihtiyaçlara uygun yazılım yapısı oluşturmayı öğrendi