Hangi tasarım kalıbı ne zaman kullanılır? [kapalı]


104

Tasarım modellerini çok seviyorum ama ne zaman uygulayabileceğimi görmekte zorlanıyorum. Tasarım modellerinin açıklandığı birçok web sitesi okudum. Çoğunu anlıyorum, ancak kendi durumumda bir kalıbı tanımakta zorlanıyorum.

İşte bu yüzden bu soruyu soruyorum. Hangi tasarım modelinin ne zaman kullanılacağı hakkında herhangi bir kılavuz / alarm çanı var mı?

Örneğin, hangi nesneyi oluşturmanız gerektiğini belirlemek için bir switch deyimi yapıyorsanız, muhtemelen fabrika tasarım modelini kullanmak istersiniz. Dolayısıyla bu durumda switch deyimi, Fabrika modelini kullanmak için bir "alarm zili" dir.

Peki, bir tasarım modeli belirlemek için daha fazla "alarm zili" biliyor musunuz?


6
Genellikle gördüğüm desen açıklamaları, o tasarım desenini isteyeceğiniz durumların bir tanımını içerir.
R. Martinho Fernandes

Yanıtlar:


99

Genellikle süreç tam tersidir. Tasarım modellerini kullanacağınız durumları aramayın, optimize edilebilecek kodlar arayın. Doğru yapılandırılmadığını düşündüğünüz kodunuz olduğunda. problemi çözecek bir tasarım modeli bulmaya çalışın.

Tasarım kalıpları yapısal problemleri çözmenize yardımcı olmak içindir, sadece tasarım modellerini kullanabilmek için uygulamanızı tasarlamayın.


23
Sadece yapısal sorunlar değil, aynı zamanda davranışsal ve yaratımsal sorunlar.
DevDemon

1
Tasarım kalıpları, test edilmiş, kanıtlanmış geliştirme paradigmaları sağlayarak geliştirme sürecini hızlandırabilir. Etkili yazılım tasarımı, uygulamanın ilerleyen zamanlarına kadar görünür hale gelemeyecek sorunları dikkate almayı gerektirir. Tasarım kalıplarını yeniden kullanmak, büyük sorunlara neden olabilecek ince sorunları önlemeye yardımcı olur ve kalıplara aşina olan kodlayıcılar ve mimarlar için kod okunabilirliğini artırır.
SaddamBinSyed

5

Bunları öğrenin ve yavaşça yeniden şekillendirip ne zaman kullanacağınızı anlayabileceksiniz. Tekli desen gibi basit bir şeyle başlayın :)

Bir nesnenin bir örneğini ve yalnızca BİRİNİ oluşturmak istiyorsanız. Tekil kalıbı kullanırsınız. Diyelim ki seçenekler nesnesiyle bir program oluşturuyorsunuz. Onlardan birkaç tane istemezsin, bu aptalca olur. Singleton asla birden fazla olmayacağından emin olur. Singleton modeli basittir, çok kullanılır ve gerçekten etkilidir.


17
Singleton, yalnızca bir örneğe ihtiyacınız olduğunda gerçekten uygun değildir . Singleton, bir örnekle sınırlamanız gerektiğinde içindir. Yalnızca bir örneğe ihtiyacınız olduğunda , yalnızca bir örnek oluşturmayı ve onu kullanmayı deneyebilirsiniz.
R. Martinho Fernandes

Ayrıca singleton bazı yerlerde çok kullanışlı ve gerekli olmakla birlikte gerekmediğinde uygulanması da çok kolay bir kalıptır. Burada ima ettiğiniz gibi ve Fernandes'nin de belirttiği gibi, muhtemelen ihtiyacınız yok. Nitekim, tekli kalıp kullanımı olası (muhtemelen) kod kokularının iyi bir işaretidir. Bir hizmet sınıfı için kullanmak, büyük olasılıkla bir kod kokusu. DI'ye ihtiyacın var gibi geliyor, tekil değil. Bazı insanlar onları bu şekilde kullanır. Özellikle küçük (önemsiz) kod veya POC'ler için. Ama dediğim gibi, bazı etkili kullanımlar var. Bir şeyi yapmanın kolay bir yolunu bulmayın ve sadece yapın.
Suamere

4

@Peter Rasmussen'e tamamen katılıyorum.

Tasarım kalıpları, yaygın olarak ortaya çıkan tasarım problemine genel çözüm sağlar.

Aşağıdaki yaklaşımı takip etmenizi istiyorum.

  1. Her modelin amacını anlayın
  2. Her modelin kontrol listesini veya kullanım durumunu anlayın
  3. Sorununuzun çözümünü düşünün ve çözümünüzün belirli modellerin kontrol listesine girip girmediğini kontrol edin.
  4. Değilse, tasarım modellerini görmezden gelin ve kendi çözümünüzü yazın.

Kullanışlı bağlantılar:

kaynak oluşturma : C ++ ve Java dahil olmak üzere birçok dilde amacı , yapıyı ve kontrol listesini güzel bir şekilde açıklar

wikipedia : C # ve Java dahil olmak üzere birçok dilde yapıyı, UML diyagramını ve çalışma örneklerini açıklar.

Her bir kaynak tasarım kalıbındaki kontrol listesi ve temel kurallar, aradığınız alram çanını sağlar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.