Tasarım Desenleri Hakkında Soru
-
Tasarım desenleri çok hojdır ama anlamadığım bir iki nokta var.
Şimdi bunları ayrı ayır sınıflar üzerine uyguluyoruz herhalde. Mesela Program.java adında bir dosya ve içinde 10 tane farklı sınıfım olsun.
Bu sınıflara yaptıkları işlere göre her birine farklı şablon mu uygulanıyor?
Yoksa
proje taa en başından tasarlanıp tüm projedeki tüm sınıflarda sadece bir tane şablon mu kullanılıyor?
Java nın kaynak kodlarına baktım karışık olarak kullanmışlar.
Mesela util, lang paketinin içindeki bir çok sınıf Singleton uygulamış. Ama bir çok başka sınıfta açıkça görülebileceği gibi Singleton uygulamamış(birden fazla örnekleri olabilitesi).
Her sınıfın farklı şablon uygulaması projeyi iyici karmaşık hale getirmez mi?
-------------------------------------------
Bir de şimdi aklıma geldi,
Başkasının yazdığı bir projeyi, tasarım şablonu kullanmış mı kullanmışsa ne yapmış tarzında analiz edip, biz nasıl devam edebiliriz?
SkynetX tarafından 10/May/17 12:49 tarihinde düzenlenmiştir -
/up
-
Yok mu hic bilgisi olan?
/son up
-
Tasarım desenleri ile ilgili senin başta yaşadığın "lan şimdi direk deseni yazarak mı başlıyoruz, adam hangi desenini kullanmış nasıl anlıyoruz direk anlaşılıyor mu vs." gibi handikaplar bendede vardı.
Tasarım desenlerinde ne kadar ustaysan ve ne kadar tecrübeliysen bir yazılım geliştirirken o kadar erken deseni uygulamayı veya gördüğün bir deseni anlayabileceğine inanıyorum.
Ben genele iteratif olarak desenleri uyguluyorum. Uygulamayı yazmaya devam ettikçe eğer koduna hakimsen yada değişiklik geldiğinde, bug fixlersen veya sıkıntıdan kodu gözden geçirmeye başlarsan temelde bir takım şeyleri fark edebiliyorsun.
- Kod tekrar ediyorsa
- Kodu değiştirdiğinde bir çok yer onunla beraber değişiyorsa
- Aynı iş farklı mantıklarla yapılıyor ve bunları if yada switch ile kontrol ediyorsak
gibi temel şeyler beni kıllandırıyor mesela. Bu durumları gördüğümde oturup kodun işleyişini bir kağıda çizip bakıyorum. Eğer desenler hakkında bilgim zayıflamışsa yada benzer problemler için google'da arama yapıyorum ve bu işe uygun desen varsa onu implemente etmeye çalışıyorum.
Bazı desenler aslında çok bariz şekilde uygulanacağı yerleri belli ederler. Örneğin Singleton pattern. Herhalde mülakatlardada en fazla çıkan ve en banko cevabı "Aga işte veritabanı bağlantısı singletondır." şeklinde olan desen.
Önceki programcı tarafından kullanılan deseni nasıl anlayabilirim?
Genelde desenlerin içinde bazı terimler vardır. Adapter pattern için Adapter, Builder pattern için builder, Singleton pattern için Singleton-instance, Observer pattern için Observer-Observable gibi gibi...
Projedeki Interface'lere göz atarakda bu patternları fark etmen kolaylaşabilir. Eğer bir yazılımcı Observer Pattern'ı implemente etmiş ama IObserver, IObservable interface'i kullanmayıp götünden element uydurmuşsa onun amk ben. Böyle tipler olabiliyor onları kaale alma. Pattern'ın olayı zaten bakanın hemen mevzuyu anlaması, fantaziye gerek yok.
Java kaynak kodundan patternları öğrenmek ve anlamak zor başlangıçta. Onun yerine internette çok güzel makaleler var. "Real World examples" adıyla yayınlanan makaleler işini kolaylaştırır. Çünkü gerçekten aklında oturacak gerçek örnekler olduğu için kavramanı kolaylaştırır.
Mesela pattern öğrenmek için:
Kendi cache mekanızmanı yazabilirsin. Burada singleton pattern'i çok güzel implemente edebilirsin. Ayrıca factory pattern'i InMemory-Persistency kısımlarında kullanabilirsin.
Şimdi buraya kadar benim dilimin döndüğümce cahil aklımca bu kadarlık zamanda anladığım, öğrendiğim ve çıkarımlarım oldu. İşin doğru, tam ve eksiksiz maddeleri için (Loose Coupling, separation of concerns vs.) için biraz OOP nin temellerine ve Wikipedia'ya bakıp ders çalışır gibi önce başlıkları not alıp sonra bu notları tek tek araştırıp bunlarla ilgili örnekler yaparak kendine bir çalışma haritası çıkabilirsin gibi.
-
Patternleri projenin yapısına uygularsın. Veritabanı bağlantısı yapacağın yerde Singleton uygulanabilirken başka classta ihtiyacın olmayabilir.
Her class için illa bir pattern kullanmak gerekmiyor. Hatta paternlere hakim değilsek daha kötü sonuçlar elde etmek mümkündür.
Önemli olan desing patternları hangi durumlarda kullanılabileceğini düşünebillmektir.
intialcatalog tarafından 11/May/17 11:36 tarihinde düzenlenmiştir -
@TeRRoR;
Hocam çok teşekkür ederim. Çok değerli bilgiler vermişsin. Öğrendiğim şeyler oldu.
@initialcatalog;
Hocam teşekkür ediyorum.
-
desenler hakkinda kitaptan yararlanmani taviye ederim C# ile Tasarım Desenleri ve Mimarileri
-
override bunu yazdı
desenler hakkinda kitaptan yararlanmani taviye ederim C# ile Tasarım Desenleri ve Mimarileri
Zannedersem bu kitapdan vardı bende de güzel anlatıyordu diye hatırlıyorum. Buna bakılabilir. Ayrıca daha temel ve daha eğlenceli eğitim için http://shop.oreilly.com/product/9780596007126.do şu kitap herhalde en ünlüsüdür. Ayrıca @override 'in bahsettiği kitaptaki örnekler github'da varmış onada bakabilirsin hocam.
-
Türk yazarların 3-4 tanesi hariç(Kaan Aslan, Timur Karaçay, Mustafa Başer) almıyorum. Ama Head First serisi cidden güzel seri. Onu bulmaya çalışayım. Teşekkürler.
-
Şuda şurda dursun:
https://www.youtube.com/watch?v=7m88T8-96X4
-
Tasarım desenleri sabit olmaz her zaman ihtiyaca göre şekillenir.
Mesela veritabanı sınıfları çoğunlukla singleton iken herhangi bir projede farklı veritabanı bağlantıları gerekebilir ki ilgili projede veritabanı sınıfının doğurgan desenlerden biri olması beklenir.