11.1 – 3 Katmanlı Yapı Nedir?


📘 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:

  1. Entity Katmanı: Veriyi tutar, yani sınıf tanımları burada yapılır.
  2. Business (BLL) Katmanı: İş mantığını barındırır, kurallar burada yazılır.
  3. 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:

KatmanGöreviÖrnek
EntityVeri yapısını tanımlarpublic class Ogrenci { public string Ad; }
BusinessKuralları uygular, listeleme, filtreleme yaparOgrenciListele(), OgrenciEkle()
UIForm ekranı, kullanıcı ile iletişimButton, 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

Leave a Reply