Cambridge English Corpus kaynağından
Cambridge English Corpus kaynağından
Cambridge English Corpus kaynağından
Cambridge English Corpus kaynağından
Cambridge English Corpus kaynağından
Hansard archive
'danHansard archive
'danHansard archive
'danHansard archive
'danHansard archive
'danHansard archive
'danHansard archive
'danÖrneklerdeki görüşler Cambridge Dictionary'nin editörlerinin, Cambridge University Press'in ya da lisans sağlayıcılarıın görüşlerini temsil etmez.
EğitimMemento Mori Ne Demek? Dvmeleri Ssleyen Memento Mori Kelimesinin Trke Anlamı
-
Bu yazı Design Patterns/Tasarım Desenleri nedir? başlıklı yazı dizisinin bir parçasıdır.
Bu içerik ağırlıklı olarak funduszeue.info sitesindeki içeriğin tercümesi ve derlenmesinden oluşturulmuştur.
Tüm tasarım desenleri ya da diğer adıyla tasarım kalıplarına yönelik ayrıntılı içeriklere yazının sonundaki bağlantılardan ulaşabilirsiniz.
Memento adını duyunca sizin de aklınıza Christopher Nolanın yönetmenliğini yaptığı o meşhur film mi geliyor bilmiyorum ama bu yazda tasarım deseni design pattern olan Mementoyu inceleyeceğiz. Memento, bir nesnenin önceki durumunu, uygulama detaylarını açığa çıkartmadan kaydetmeniz ve geri getirmenizi sağlayan bir tasarım desenidir.
Bir metin editörü uygulaması yazdığınızı düşünün. Uygulamanız sadece metni düzenleme işlemleri değil, metin biçimlendirme, metin içine görseller ekleme gibi özelliklere de sahip olsun.
Diyelim ki kullanıcıların yaptıkları değişiklikleri geri alabilmelerini sağlamaya karar verdiniz. Bu özellik yıllardır çoğu uygulamada varsayılan olarak bulunduğu için kullanıcıların uygulamanızdan böyle bir beklentisi var. Bunu şu şekilde doğrudan uygulamaya karar verdiniz; her işlemden önce uygulama tüm nesnelerin mevcut durumlarını bir depolama alanına kaydedecek, kullanıcı geri dönmeye karar verirse uygulamanız en saklama alanından en son anı alıp bunu bütün nesneleri o hale döndürmek için kullanacak.
Dahası da var. Editörün anlık görüntülerini ele alalım. Bu görüntülerin içinde ne olur? En azından mevcut metin, imleçin o andaki konumu, kaydırma çubuğunun konumu vb. bilgiler olmalı değil mi? Bir anlık görüntü oluşturmak için bütün bu değerleri toplamalı ve bir çeşit konteyner içine yerleştirmelisiniz.
Bu konteyner listelerini de büyük ihtimalle bir geçmişi gösteren bir liste içinde tutacaksınız. Sonuç olarak bu konteynerler bir sınıfa ait nesneler haline gelecekler. Bu sınıfın neredeyse hiç bir metodu yokken, editörün durumunu yansıtan bir sürü alanı olacak. Diğer nesnelerin bu görüntüye yazmaları veya okuyabilmeleri için bu alanları açık (public) yapmanız gerekecek. Bu da özel (private) olsun ya da olmasın editörün durumundaki tüm bilgiyi açık hale getirecek. Diğer sınıflar, anlık görüntü sınıfındaki en ufak değişiklikten bile etkilenebilecek ve bağımlı hale gelecekler. (normalde özel (private) alanlar ve metotların kendi iç dinamikleri ile hallolacak konularda bile)
Görünüşe göre bir çıkmaza girdik, ya ilgili sınıfların tüm detaylarını dışa açık (public) hale getirecek ve çok kırılgan bir yapıya dönüştüreceksiniz, ya da durumlarına erişimi kısıtlayacak ama o zamanda anlık görüntü oluşturamayacaksınız. Geri al özelliğini uygulamak için başka bir yol yok mu?
Az önce yaşadığımız tüm sorunlar kapsamı sınırlandırmanın bozulmasından kaynaklanıyor. Bazı nesneler yapmaları gerekenden daha fazlasını yapıyorlar. Bir işlemi ilgili nesneye yaptırmak yerine, o işlemi yapmak için gereken veriyi nesnenin özel (private) alanlarına müdahale ederek yapmaya çalışıyorlar.
Memento deseni anlık görüntü oluşturma işini, asıl nesnenin kendisine delege ediyor. Başka nesnelerin dışarıdan editörün durumunu kopyalamaya çalışması yerine editör sınıfının kendi anlık görüntüsünü oluşturmasını sağlıyor.
Bu desen nesnenin durum kopyasını memento adı verilen özel bir nesnede saklamayı öneriyor. Mementonun içeriği kendisini oluşturandan başka hiç bir nesne tarafından ulaşılabilir değil. Diğer nesneler, Memento ile sınırlı bir arayüz üzerinden iletişim kurarak sadece anlık görüntü meta bilgilerine (oluşturma zamanı, yapılan işlemin adı vs. gibi bilgiler) ulaşabilirler. Nesnenin orijinal durumu ise görüntünün kendisinde yer alır.
Bu sınırlayıcı politika mementoları, bakıcı olarak adlandırılan başka nesnelerin içinde depolamaya olanak verir. Bakıcı memento ile çok sınırlı bir arayüz üzerinden iletişim kurduğu için memento içinde saklanan görüntüye erişemez. Aynı zamanda asıl nesnenin memento içerisindeki tüm nesnelere erişebilmesi ve gerektiğinde önceki duruma getirebilmesi gerekir.
Bir nesneyi önceki duruma getirmeniz için anlık görüntüler oluşturmanız gerekiyorsa Memento desenini kullanabilirsiniz
Memento deseni bir nesnenin özel alanlar da dahil olmak tam bir kopyasını oluşturmanıza ve nesneden ayrı olarak saklamanıza olanak veren bir desendir. Çoğu insan bu deseni geri al kullanımı nedeniyle biliyor olsa da işleme (transaction) dayalı işlemlerle uğraşırken de vazgeçilmez olanaklar sağlar. ( hata durumunda işlemi geri almak için )
Bir nesnenin alanları, getirici (getter) ve ayarlayıcılarına ( setter ) ulaşmak nesnenin kapsam sınırlarını ihlal ediyorsa bu deseni kullanabilirsiniz.
Memento, bir nesnenin durumunu saklamak için sorumluluğu nesnenin kendisine verir. Başka hiç bir nesne durumun bu anlık görüntüsüne ulaşamaz, böylece nesnenin verileri güvenli ve emniyetli kalır.
Örnek PHP Kodu
Örnek Python Kodu
çamaşır makinesi ses çıkarması topuz modelleri kapalı huawei hoparlör cızırtı hususi otomobil fiat doblo kurbağalıdere parkı ecele sitem melih gokcek jelibon 9 sınıf 2 dönem 2 yazılı almanca 150 rakı fiyatı 2020 parkour 2d en iyi uçlu kalem markası hangisi doğduğun gün ayın görüntüsü hey ram vasundhara das istanbul anadolu 20 icra dairesi iletişim silifke anamur otobüs grinin 50 tonu türkçe altyazılı bir peri masalı 6. bölüm izle sarayönü imsakiye hamile birinin ruyada bebek emzirdigini gormek eşkiya dünyaya hükümdar olmaz 29 bölüm atv emirgan sahili bordo bereli vs sat akbulut inşaat pendik satılık daire atlas park avm mağazalar bursa erenler hava durumu galleria avm kuaför bandırma edirne arası kaç km prof dr ali akyüz kimdir venom zehirli öfke türkçe dublaj izle 2018 indir a101 cafex kahve beyazlatıcı rize 3 asliye hukuk mahkemesi münazara hakkında bilgi 120 milyon doz diyanet mahrem açıklaması honda cr v modifiye aksesuarları ören örtur evleri iyi akşamlar elle abiye ayakkabı ekmek paparası nasıl yapılır tekirdağ çerkezköy 3 zırhlı tugay dört elle sarılmak anlamı sarayhan çiftehan otel bolu ocakbaşı iletişim kumaş ne ile yapışır başak kar maydonoz destesiyem mp3 indir eklips 3 in 1 fırça seti prof cüneyt özek istanbul kütahya yol güzergahı aski memnu soundtrack selçuk psikoloji taban puanları senfonilerle ilahiler adana mut otobüs gülben ergen hürrem rüyada sakız görmek diyanet pupui petek dinçöz mat ruj tenvin harfleri istanbul kocaeli haritası kolay starbucks kurabiyesi 10 sınıf polinom test pdf arçelik tezgah üstü su arıtma cihazı fiyatları şafi mezhebi cuma namazı nasıl kılınır ruhsal bozukluk için dua pvc iç kapı fiyatları işcep kartsız para çekme vga scart çevirici duyarsızlık sözleri samsung whatsapp konuşarak yazma palio şanzıman arızası