TypeScript ile Strategy Design Pattern Kullanımı

İbrahim Demirli
Kodcular
Published in
3 min readJul 5, 2021

TypeScript + Strategy Design Pattern…

Merhabalar,

TypeScript’in ne olduğu ve nasıl kullanıldığına dair çok fazla kaynak olduğunu gözlemledim. Bundan dolayı detaylı tanımlamalara girmeden sizlere, TypeScript kullanarak günlük hayattan bir örnek ile “Strategy Design Pattern” implementasyonunun nasıl yapıldığını anlatmaya çalışacağım.

“TypeScript” kodlamasıyla beraber “Strategy Design Pattern” i mantıksal çerçevede inceliyor olacağız.

1. TypeScript Nedir ?

TypeScript , javaScript’in bir üst kümesi olarak farklı tipleri içinde barındıran ve geliştirme ortamında nesne yönelimli programlamaya uygun kullanışlı bir javaScript kodudur.

JavaScript için geçerli olan tüm özellikler TypeScript için de geçerlidir. Eğer javaScript biliyorsanız TypeScript’in büyük oranına hakimsiniz demektir.

2 . Strategy Design Pattern

Projelerimiz büyüdükçe yönetimi ve çalışabilirliği giderek zorlaşır. Her ne kadar OOP doğrultusundan ayrılmasakta bazı kalıplara ihtiyaç duyarız. Genişletilebilir ve uzun ömürlü bir uygulamanın inşası için bazı tasarım desenlerini (Design Patterns) tercih ederiz.

Bu tasarım desenlerinin her biri karşılaştığımız bir dizi sorunlara nasıl yaklaşmamız gerektiğine dair bize çözüm yolları sunar. Mevcutta keşfedilmiş düzinelerce desen var ve onları bir tasarım deseni olarak tanımlamasanız bile en azından bazılarını kullandığınızdan eminim :)

Tasarım desenleri 3 kategoriye ayrılır.

  1. Creational : Nesne oluşturma mantığını gizleyerek sınıflardan nesne oluşturmaya alternatif çözümler sunar
  2. Structural : Nesneler arasındaki ilişkinin yapısını düzenlemek için çözümler sunar.
  3. Behavioral : Çalışma zamanında nesneler arasındaki davranışlar için çözümler sunar.

Strategy Design Pattern: Bir algoritma ailesi tanımlamanıza, her birini ayrı bir sınıfa koymanıza ve nesnelerini değiştirilebilir hale getirmenize izin veren davranışsal bir tasarım modelidir.

Strategy Design Pattern Akış Diyagramı

Strategy Design Pattern 3 ana bölümden oluşuyor. Bunlar ;

  1. Context
  2. Strategy
  3. Concrete Strategy

Örnek Senaryo

Bağlam (Context) üzerinde bir yemeğin 3 farklı pişirme eylemini gerçekleştirecek ana strateji (Strategy) ve buna bağlı alt stratejiler (Concrete Strategy) ortaya koyacağız. Ortaya koyacağımız ana strateji , yapmak istediğimiz işin ortaklığını belirtirken (Pişirme Eylemi) her bir alt stratejide ana hedefimiz dahil , istediğimiz diğer eylemleri gerçekleştirmemize imkan sağlayacak.

Şimdi kodlamaya geçebiliriz…

3. TypeScript ile Strategy Design Pattern implementasyonu

1. Strateji belirlemek (IStrategy)

Yapacağım iş yemek pişirme eylemi olacağı için , ilk önce ana stratejimi belirliyorum.

2. Pişirme yöntemlerini belirtiyorum , yani alt stratejileri tanımlıyorum.(Concrete Strategy)

3. Bu Stratejiyi yönetmek için bir bağlam (Context) tanımlıyoruz.

4. Herhangi bir alt strateji ile yapıyı çalıştırıyorum.

Output

Sonuç

Strategy Pattern’i , belirli bir şeyi birçok farklı şekilde yapan bir sınıf almanızı ve tüm bu algoritmaları strateji adı verilen ayrı sınıflara çıkarmanızı önerir. Context adı verilen orjinal sınıf, stratejilerden birine referans depolamak için bir alana sahip olmalıdır. Context işi tek başına yürütmez , bunun yerine işi bağlantılı strateji nesnesine devreder.

İş için uygun bir algoritma seçmekten Context sorumlu değildir. Bunun yerine kullanıcı , istenen stratejiyi (OvenBaking) bağlama geçirir. Context , stratejiler hakkında pek bir şey bilmez. Tüm stratejilerle çalışır ve seçilen strateji içindeki algoritmayı tetiklemek için yalnızca tek bir yöntem sunar.

Bu şekilde Context , somut stratejilerden (concrete strategy) bağımsız hale gelir , böylece Context’in kodunu veya diğer stratejileri değiştirmeden yeni algoritmalar ekleyebilir ve mevcut olanları değiştirebilirsiniz.

Bitirirken

Bu yazımda, Strategy Design Pattern’in TypeScript üzerinde nasıl kullanıldığını ve bu pattern’in ne anlam ifade ettiğini anlatmaya çalıştım.

Umarım faydalı olmuştur.

Başka bir konuda görüşmek üzere…

--

--

İbrahim Demirli
Kodcular

software || reader || thinker || writer || always a student