13.5 – Katmanlı Projede Dosya İşlemi Entegresi


🧩 13.5 – Katmanlı Projede Dosya İşlemi Entegresi


🎯 

Amaç:

Bu başlık altında öğrenci, dosya işlemlerini Entity – Business – UI şeklinde ayrılmış bir katmanlı mimari yapıya entegre etmeyi öğrenir.

Böylece:

  • Veri saklama işlemleri formun içinde değil, business katmanında tanımlanır.
  • Veriler dosyaya iş katmanında yazılır ya da oradan okunur.
  • UI sadece bu iş katmanını çağırır.

📁 

Katman Yapısı:

ProjeAdı
│
├── Entity
│   └── Not.cs
│
├── Business
│   └── NotManager.cs
│
├── UI (Form)
    └── Form1.cs

🧱 

Entity – Not.cs

public class Not
{
    public string Baslik { get; set; }
    public string Icerik { get; set; }
    public DateTime Tarih { get; set; }
}

🧱 

Business – NotManager.cs (Dosya ile Entegre)

using System.IO;

public class NotManager
{
    private static readonly string dosyaYolu = "notlar.txt";

    public static void Kaydet(Not yeniNot)
    {
        if (!File.Exists(dosyaYolu))
            File.Create(dosyaYolu).Close();

        using (StreamWriter sw = new StreamWriter(dosyaYolu, true))
        {
            sw.WriteLine($"{yeniNot.Tarih};{yeniNot.Baslik};{yeniNot.Icerik}");
        }
    }

    public static List<Not> Listele()
    {
        List<Not> notlar = new();

        if (!File.Exists(dosyaYolu))
            return notlar;

        using (StreamReader sr = new StreamReader(dosyaYolu))
        {
            string satir;
            while ((satir = sr.ReadLine()) != null)
            {
                var parcalar = satir.Split(';');
                if (parcalar.Length == 3)
                {
                    notlar.Add(new Not
                    {
                        Tarih = DateTime.Parse(parcalar[0]),
                        Baslik = parcalar[1],
                        Icerik = parcalar[2]
                    });
                }
            }
        }

        return notlar;
    }
}

🧱 

UI – Form1.cs (Business sınıfı ile dosya işleme)

✅ Not Ekleme:

private void btnKaydet_Click(object sender, EventArgs e)
{
    Not yeniNot = new()
    {
        Baslik = txtBaslik.Text,
        Icerik = txtIcerik.Text,
        Tarih = DateTime.Now
    };

    NotManager.Kaydet(yeniNot);
    MessageBox.Show("Not kaydedildi.");
}

✅ Listeleme:

private void btnListele_Click(object sender, EventArgs e)
{
    lstNotlar.Items.Clear();
    var notlar = NotManager.Listele();

    foreach (var not in notlar)
    {
        lstNotlar.Items.Add($"{not.Tarih} - {not.Baslik}");
    }
}

💡 

Bu Yapının Sağladığı Faydalar:

FaydaAçıklama
Ayrılmış sorumlulukUI sadece kullanıcı arayüzüyle ilgilenir, dosya işleri işlemler Business’a devredilir.
Kod tekrarını önlerDosya işlemleri tek merkezde (NotManager) toplandığı için tekrar yazılmaz.
Bakımı kolayDosya yapısı değişirse sadece Business katmanı güncellenir.
Test edilebilirlikUI bağımsız olarak iş mantığı test edilebilir hale gelir.

🎯 

Sonuç:

Bu örnekle öğrenciler:

  • Hem katmanlı yapı hem de dosya işlemleri disiplinine hâkim olur
  • Dosya işlemini büyük uygulamalara taşımayı öğrenir
  • Daha profesyonel ve sürdürülebilir yazılım yazma pratiği kazanır

Leave a Reply