ANTI-PATTERNS

Spaghetti Code Anti-Pattern Nedir?

Spagetti Code denilince GOTO ile programlama aklımıza geliyor. Günümüzde GOTO ile program geliştirme bitti. Structural, Object-Oriented ve Functional Programming yöntemleri kullanılıyor. Yinede Spaggetti Kod Anti Pattern oluşuyor mu ?

--

Spaghetti kod ne demek ?

Kodun akışının takip edilemez şekilde bir yerlerden bir yerlere zıplaması, atlaması demek.

Eskiden Low Level Programlama dillleri ile kod geliştiriliyordu. Komutlar içerisinde bir yerden bir yere zıplayarak kod geliştiriliyordu.

GOTO

İlk Assembly yani makine dilinde Register(yazmaç) veriyi taşı, toplama işlemi yap sonra bunu diske yaz emirlerinin olduğu kod blokları arka arka yazıldığını görebilirsiniz.

Assembly Code

Zaman içerisinde High Level Language (Yüksek seviyeli diller ile birlikte) makine dilinden uzaklaştıkça GOTO kullanımının yazılım geliştirmeye zarar verdiği ve kodun spagetti gibi karıştırdığını belirtmişlerdir. Go to Statement Considered Harmfull . ( Dijkstra 1968)

Bu konunun detayı için Programlama Paradigmaları yazısı içerisinde bulunan GOTO, Structural, Procedural, OOP ve Functional Programming kavramlarını detaylıca okuyabilirsiniz.

Asıl Sorun Kod içerisinde Kontrolsüz Zıplama

Peki artık GoTo ile kod geliştirmiyoruz. Spaghetti Code hale biz geliştiriciler için bir sorun mu ?

Evet hangi seviyede kod yazarsanız yazın, hatta microservis geliştirme yapın kodun akışı aşağıdaki şekilde gerçekleşecektir.

Kodun İşleyişi

Kodun işleyişi bu şekilde neden oluyor peki ?

  • Koşullar
  • Döngüler
  • I/O Erişim (Disk, Grafik Kartı, Network)
  • Durumlar Arası Geçişler
  • Hata Durumları
  • Async İşlemler

Özetle business flow (iş akışını gerçekleştirmek) için kodunuz sürekli olarak dallanması bir yerden bir yere atlaması gerekiyor. Ama mesela geliştiricilerin bu atlamayı nasıl yönettikleri ile ilgili.

Kodu geliştirirken bu akışları yöneten mekanizmaları ayrıştırırsanız kodunuz spagetti yapısını dönmez. Örneğin aşağıdaki mekanikleri kullanarak kod

  • Fonksiyon kapsamında (Switch, If, For …..)
  • Modül veya Sınıf kapsamında (Manager, Controller ve Tasarım Örüntüleri)
  • Bileşen, Microservis kapsamında ( Middleware ve Mimari Örüntüler)

Önemli olan bu zıplamaları ne kadar merkezi yerlerden yönetebiliyorsunuz.

Zıplamayı Yönetmek

Kod içerisinde biraz öncede bahsettiğim gibi farklı seviyelerde farklı özellikleri kullanarak bu zıplamayı daha kontrol edilebilir, daha izlenebilir ve daha okunaklı hale getirebilirsiniz.

Örneğin çok uç bir örnek olacak ama Mimari seviyede transactional bir işlemi bir kuyruk mekaniğine SQS, ActiveMQ, RabbitMQ farklı processler bağlayarak kod işletimini State Mekaniğini bu yapılar üzerinde yönetebilirsiniz. Bu işlemler için Saga Patterns, Step Functions yapıları kullanabilirsiniz.

Okumaya Devam Et 😃

Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.

--

--