Programlamada Tasarım Desenleri #16 — Memento Design Pattern (dotnet c#)

Programlamada Tasarım Desenleri #16 — Memento Design Pattern (C# .NET ile Örnekli Anlatım)

Merhaba yazılım sevdalıları! 👨‍💻👩‍💻 Bu yazı dizimizin 16. bölümünde, yazılım mimarisinin en güçlü araçlarından biri olan Memento Design Pattern (Hatıra Tasarım Deseni)‘ni ele alacağız. Özellikle .NET platformunda (C#) geliştirilen uygulamalarda nasıl kullanılabileceğini gerçek dünya örnekleriyle birlikte açıklayacağız.

Hem geçmişe göz atmayı sevenler, hem de undo/redo gibi özellikleri projelerine kazandırmak isteyenler için harika bir desen sizi bekliyor! 😊

Memento Design Pattern Overview

📌 Memento Design Pattern Nedir?

Memento Design Pattern, bir nesnenin önceki durumunu kaydedip daha sonra bu duruma dönebilmemizi sağlayan bir davranışsal (behavioral) tasarım desenidir. Bu desen, genellikle “undo / redo” (geri al / yinele) gibi işlemlerde kullanılır.

🎯 Amaç:

Bir nesnenin iç durumunu (state) dış dünyadan gizleyerek, onu daha sonra geri yükleyebilmek amacıyla saklamaktır.

👥 Desende Rol Alan Sınıflar

  1. Originator: Durumu oluşturan ve değiştiren nesne
  2. Memento: Durumun saklandığı nesne (genellikle sadece orijinatör erişebilir)
  3. Caretaker: Durumu gerektiğinde saklayan ve geri yükleyen nesne

🧠 Ne Zaman Kullanılmalı?

  • Kullanıcılara geri alma (undo) imkanı sağlamak istediğinizde
  • Nesnelerin önceki durumlarına dönüş yapılmasını istediğiniz durumlarda
  • Durum yönetimi uygulamalarında (ör. text editor gibi)

🧪 Memento Design Pattern – C# ile Kod Örneği

.NET uygulamalarında bu deseni uygulamak oldukça kolaydır. Şimdi birlikte bir örnek üzerinden adım adım ilerleyelim.

⚙️ Senaryo: Basit Bir Metin Editörü

Kullanıcı metin yazıyor. Her değişiklikte metnin son hali saklanıyor ve kullanıcı istediğinde geri alabiliyor.

📁 1. Memento.cs

public class TextMemento { public string State { get; } public TextMemento(string state) { State = state; } }

📁 2. Originator.cs

public class TextEditor { private string _text; public void SetText(string text) { _text = text; Console.WriteLine("Metin Güncellendi: " + _text); } public string GetText() { return _text; } public TextMemento Save() { return new TextMemento(_text); } public void Restore(TextMemento memento) { _text = memento.State; Console.WriteLine("Metin Geri Yüklendi: " + _text); } }

📁 3. Caretaker.cs

public class TextHistory { private Stack _history = new Stack(); public void Save(TextMemento memento) { _history.Push(memento); } public TextMemento Undo() { if (_history.Count > 0) return _history.Pop(); return null; } }

📁 4. Program.cs

class Program { static void Main(string[] args) { TextEditor editor = new TextEditor(); TextHistory history = new TextHistory(); editor.SetText("İlk Cümle"); history.Save(editor.Save()); editor.SetText("İkinci Cümle"); history.Save(editor.Save()); editor.SetText("Üçüncü Cümle"); editor.Restore(history.Undo()); editor.Restore(history.Undo()); } }

🖼️ Örnek Çıktı

Metin Güncellendi: İlk Cümle
Metin Güncellendi: İkinci Cümle
Metin Güncellendi: Üçüncü Cümle
Metin Geri Yüklendi: İkinci Cümle
Metin Geri Yüklendi: İlk Cümle

📈 SEO Odaklı Anahtar Kelimeler

  • Memento Design Pattern Nedir
  • C# Tasarım Desenleri
  • .NET Undo/Redo işlemi
  • Behavioral Design Patterns
  • Yazılımda Geri Alma İşlemi
  • C# ile Design Pattern Uygulaması
  • Memento Pattern C# Örneği

🧩 Gerçek Hayattan Kullanım Alanları

  • Word veya Notepad gibi metin düzenleyicileri
  • Grafik tasarım araçları (Photoshop, Figma)
  • Form verisi geri alma işlemleri
  • Oyunlarda karakter durum kaydetme/load etme fonksiyonları

🛠️ İpuçları ve Dikkat Edilmesi Gerekenler

  • Kaydettiğiniz durumlar (memento nesneleri) bellekte yer kaplayabilir.
  • Gereksiz yere çok fazla kayıt yapılması performans kaybına neden olabilir.
  • Originator nesnesi dış dünya ile Memento nesnesi arasındaki iletişimi iyi kapsüllemelidir (encapsulation).

🔚 Sonuç

Memento Design Pattern, özellikle kullanıcı odaklı uygulamalarda çok kritik bir yer tutar. C# ve .NET platformlarında bu deseni etkin şekilde kullanarak uygulamalarınıza gelişmiş özellikler kazandırabilirsiniz.

💡 Bir ipucu: Bu deseni diğer tasarım desenleriyle birleştirerek çok daha güçlü mimariler kurabilirsiniz. Özellikle Command Pattern ile birlikte kullanımı oldukça yaygındır.

📸 Bonus: Memento Pattern UML Diyagramı

Memento Pattern UML

*Kaynak: refactoring.guru*

🗣️ Sizin Fikriniz?

Siz bu deseni daha önce kullandınız mı? Hangi senaryolarda işinize yaradı? Yorumlarda paylaşmayı unutmayın! 👇

🔔 Yeni tasarım desenleri ve yazılım mimarileri hakkında güncellemeler almak için bloguma abone olun!

📚 Bir sonraki yazımızda: Observer Design Pattern bizlerle olacak. Takipte kalın!

📌 Etiketler:

#designpatterns #csharp #dotnet #memento #undo #softwarearchitecture #backend #tasarım desenleri

Umarım bu yazı, Memento Design Pattern’ı anlamanızı ve projelerinizde uygulamanızı kolaylaştırmıştır. Kolay kodlamalar! 🚀

Hazırlayan: [Adınız]
Tarih: [Güncel Tarih]

You may also like...

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir