YAZILIM MİMARİSİ

Refactoring Nedir?

Onur Dayıbaşı
Architectural Patterns
3 min readJul 19, 2021

--

Bir önceki yazımda Clean Code (Temiz Kod) nedir ? konusunu anlatmıştım. Daha öncesinde Technical Debt (Teknik Borç) konusundan ve bu durumu oluşturan nedenlerden bahsetmiştim. Özetle kodunuza her yeni özelliği eklerken bir takım kalite kayıplarına neden olacaksınız ve teknik borçlar zaman içerisinde artacak, kodunuz yavaş yavaş kokmaya başlayacak.

Bu durumda mevcut kabiliyetleri hiç değiştirmeden (yenisini eklemeden, eskisini bozmadan) adım adım kodun kaliteli hale getirilme işlemine REFACTORING denir.

Refactoring

SORU 1: Uygulama yeteneklerini hiç değiştirmeden koruyarak kodun üzerinde Nasıl Refactoring Yapacaksınız ?

Cevap,

Test. Kodunuz code coverage ne kadar iyiyse, kodunuz davranışları otomatik testler ile ne kadar çevrelenmiş ise, kodunuzda refactor yaptığınızda uygulamanızın değişmediğinden emin olursunuz. (TDD ve CI kavramlarınının çok iyi oturmuş olması gerekiyor.)

Küçük, küçük adımlarla ilerleyin. Kod üzerindeki değişikliği planlayın, ufak parçalara bölün, her seferinde bu ufak adımlardan bir tanesini yapıp, testlerinizi çalıştırın, refactoring başarılı olduğundan emin olduktan sonra diğer ufak adıma geçin.

SORU 2: Refactoring ne zaman yapmalısınız ?

Cevap, Fırsat bulduğunuz her zaman. Bir takım problemleri kod değişikliklerini ufakken çözmek çok daha basittir. Koddaki problem çok yayılmadığı için hem etkisi, hem değişiklik yapılan kod satır sayısı az olacaktır. Bu yüzden her fırsat bulduğunuzda kod kalitenizin kontrol ederek gereken yerlerde refactoring yapın.

SORU 3: Refactoring nasıl yapacağız. Bir takım teknikleri bulunuyor mu ?

1. TDD (Test Driven Development):

Agile (Çevik) yazılım geliştirme metodunda sıkça kullanılan bir yöntemdir.

  • Test-First yönteminde önce kod geliştirilmei yapmadan önce test yazılır.
  • Testin çalıştırılması ve hata vermesi üzerine kod refactor edilerek testing geçirilmesi sağlanır.
  • Böylece her bir geliştirme aşamasında öncelik test’in yazılması, testin hata almasınınn sağlanması ve sonrada kodun refactor edilmesidir.
Kod

Not: Testin güzel bir yanıda kodun test yazılmak için istenilen soyutlama seviyesini zorunlu sağlatmasıdır. Geliştiriciyi dışarıdan bağımlılık enjekte edilecek şekilde kodu geliştirtir. Bunun nedenide gerçek uygulama verileri yerine test verileri ,gerçek servisler yerine mock servisleri koda geçip test yapabilme zorunluluğudur.

2. Basitleştirme ve Sadeleştirme Yöntemi

Kodumuzu oluşturan parçalara baktığımızda paketler, modüller, sınıflar ve içerisinde yer alan metodların olduğunu görürüsünüz.

Zaman içerisinde yeni yetenekler eklendikçe bu parçaların büyüdüğünü ve şiştiğini görürsünüz. Kod fazlalıkları, tekrarları, kodun kontrolünü giderek zorlaştırır.

Bu durumda geliştiriciler kodu parçalara yeni sınıflar veya metodlar oluşturarak delegasyon yöntemi ile iş mantıklarını azaltır veya tekrar eden kodları ortak soyutlamaların içerisine taşırlar.

Bu kısımda soyutlama aşamasında ne kadar çok Kalıtım yerine Composition(Kapsamayı) tercih ederseniz kod gelişiminiz o kadar sağlıklı olur. Bu konuyu ilerleyen zamanda Fonksiyonel Programalama yazılarımda Object Compositon içerisinde anlatıyor olacağım.

Ama temel adım olabildiğince ortak kod mantıklarını bir alanda toplayıp, kod tekrarını önlemek olmalıdır.

3. Soyutlama Yöntemi

Yazılımda öğrendiğim en önemli konu Soyutlama’ dır yani hizmet verdiğiniz Client(İstemci) belli bir protokol üzerinden API şeklinde hizmet vermeniz gerekir, dışarıdan o modülün iç mantıkları ve değişkenlerine erişelemiyor olması çok çok önemlidir. Bu yüzden kod karmaşasını engellemek için ekstra soyutlama katmanları oluşturmaktan çekinmeyin.

Ekstra Interface ve Abstract sınıflar, Ekra veri katmanları , modüller oluşturmaktan çekinmeyin. Object-Oriented Programlamanın Unutulmuş Tarihi — 2 bahsettiğimiz şu 3 kavram çok çok önemli

  • Message Passing (Mesaj ile Veri aktarımı)
  • Encapsulation
  • Dynamic Binding

Soyutlama ve haberleşmeyi bu mekanizmalar üzerinden çözecek şekilde kodu değiştirmeniz gerekmektedir.

Okumaya Devam Et 😃

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

--

--