Design pattern’lar, yazılım geliştiricilere genel bir çözüm yolu sağladığı için genellikle tasarım sürecini hızlandırır ve yazılımın daha bakımı kolay, esnek ve genişletilebilir olmasına katkıda bulunur. Yazılım geliştiriciler her ne kadar sayısız farklı proje geliştiriyor olsada hepsinin karşılaştığı ortak problemler vardır, bu problemlere karşı geliştirdekleri çözümleride deneyerek optimum çözümü bulmuşlardır bu sayede ortak problemlere yönelik genel bir dil ve anlayış gelişmiştir. Yine aynı şekilde bizlerde kendi tasarım kalıplarımızı geliştirebiliriz ancak sayısız kez denenmiş ve kendini ispatlamış ve birçok kişi tarafından önerilen bu kalıpları kullanmanın daha net bir çözüm sağlayacağını söyleyebiliriz.

Bu yazımda bir yazılım projesinde geliştirme sürecini hızlandırmayı, daha güvenilir sonuçlar elde etmeyi, sürdürülebilirliği ve esnekliği hedeflemek isteyenlerin başvurduğu Design Pattern’lere (Tasarım Kalıpları) değineceğim. Ne olduğu ve ne için kullanıldığına kısaca değinip Python dili ile örnek kullanımlarından bahsedeceğim daha çok, bunun için Github’ta çok güzel bir repo buldum, bu repo’daki örnekler üzerinden ilerleyeceğim. Buradaki amacım Design Pattern’lerin Python ile birlikte nasıl kullanılacağı çünkü şuanda online ortamda sizlerinde ulaşabildiği çoğu Python dersinde bu gibi yazılımı kolaylaştıran ve kaliteli işler ortaya çıkarabilmemizi sağlayan yazılım çözümlerinden çok bahsedilmiyor. Genel olarak yazılım ile ilgili bir üniversite bölümünde, bir işyerinde veya acı bir tecrübe sonucu öğrenebileceğimiz bu çözümleri burada hem örnekleri hem de bulduğum bu repoyu burada türkçe olarak anlatarak bir kaynak sağlamak istiyorum, lafı çok uzatmadan keyifli okumalar dilerim 🙂

Sonuç olarak, tasarım kalıpları, yazılım geliştirme sürecini optimize etmek ve daha güvenilir çözümler üretmek için geliştiricilere rehberlik eden genel stratejilerdir, ancak bunlar tam anlamıyla hazır çözümler veya kütüphaneler değillerdir. Tasarım kalıpları, genel yazılım problemlerine karşı denenmiş ve doğrulanmış çözümleri içeren düşünce modelleridir.

Geliştiricilere rehberlik eden bu çözümleri aşağıdaki şekilde sıralayabiliriz:

  1. Creational Design Patterns (Yaratımsal Tasarım Desenleri):
    • Bu desenler, nesnelerin yaratılması ve oluşturulmasıyla ilgilenir. Bağımlılıkların azaltılmak, esneklik sağlamak ve kodun yeniden kullanılabilirliği için kullanılır.
  2. Structural Design Patterns (Yapısal Tasarım Desenleri):
    • Bu desenler, sınıfların ve nesnelerin bir araya getirilmesiyle ilgilenir, yani nasıl bir araya getirileceği ve nasıl bir arada çalışacağı. Sınıf ve nesne yapısını organize etmek ve sistemdeki bileşenler arasındaki ilişkileri düzenlemek için kullanılır.
  3. Behavioral Design Patterns (Davranışsal Tasarım Desenleri):
    • Bu desenler, nesneler arasındaki işbirliği ve sorumlulukların dağılımıyla ilgilenir.

Aşağıdaki tablolar ile ilgili patternlerin python kodları ile yazılmış örneklerine ulaşabilirsiniz, daha sonraki yazılarımda Alexander Shvets‘in yazdığı Dive Into Design Patterns isimli kitap ile en sık kullanılan tasarım desenlerini kullanım amacı, çözdüğü sorunları, yapıları ve kod örnekleri ile anlatmayı planlıyorum.

Creational Patterns:

PatternDescription
abstract_factoryuse a generic function with specific factories
borga singleton with shared-state among instances
builderinstead of using multiple constructors, builder object receives parameters and returns constructed objects
factorydelegate a specialized function/method to create instances
lazy_evaluationlazily-evaluated property pattern in Python
poolpreinstantiate and maintain a group of instances of the same type
prototypeuse a factory and clones of a prototype for new instances (if instantiation is expensive)

Structural Patterns:

PatternDescription
3-tierdata<->business logic<->presentation separation (strict relationships)
adapteradapt one interface to another using a white-list
bridgea client-provider middleman to soften interface changes
compositelets clients treat individual objects and compositions uniformly
decoratorwrap functionality with other functionality in order to affect outputs
facadeuse one class as an API to a number of others
flyweighttransparently reuse existing instances of objects with similar/identical state
front_controllersingle handler requests coming to the application
mvcmodel<->view<->controller (non-strict relationships)
proxyan object funnels operations to something else

Behavioral Patterns:

PatternDescription
chain_of_responsibilityapply a chain of successive handlers to try and process the data
cataloggeneral methods will call different specialized methods based on construction parameter
chaining_methodcontinue callback next object method
commandbundle a command and arguments to call later
iteratortraverse a container and access the container’s elements
iterator (alt. impl.)traverse a container and access the container’s elements
mediatoran object that knows how to connect other objects and act as a proxy
mementogenerate an opaque token that can be used to go back to a previous state
observerprovide a callback for notification of events/changes to data
publish_subscribea source syndicates events/data to 0+ registered listeners
registrykeep track of all subclasses of a given class
specificationbusiness rules can be recombined by chaining the business rules together using boolean logic
statelogic is organized into a discrete number of potential states and the next state that can be transitioned to
strategyselectable operations over the same data
templatean object imposes a structure but takes pluggable components
visitorinvoke a callback for all items of a collection

Kaynak 1

Kaynak 2

Yorum bırakın

Trend

WordPress.com’da Blog Oluşturun.