Dağınık Koşulları Kaldırmak için 3 Güçlü Kodlama Tekniği
Kod kalitesini ve sürdürülebilirliğini artırarak karmaşık koşul yapıları optimize etmek ve basitleştirmek için üç güçlü kodlama tekniği tanıtır.
Kod kalitesini ve sürdürülebilirliğini artırarak karmaşık koşul yapıları optimize etmek ve basitleştirmek için üç güçlü kodlama tekniği tanıtır.
Yazılım geliştirmede, genellikle birden fazla senaryoyu ele alması gereken kod mantığıyla karşılaşırız. Düzgün bir şekilde yönetilmezse, bu mantıklar kolayca uzun if-else zincirlerine veya büyük switch ifadelerine dönüşebilir. Bu makale, bu yapıları optimize ederek kod kalitesini ve sürdürülebilirliğini artıran birkaç etkili tekniği tanıtacaktır.
Kullanıcı durumlarını kontrol ettikten sonra erişime izin verecek bir kullanıcı kimlik doğrulama sistemi geliştirdiğimizi varsayalım:
Bu kodun belirgin yapısal sorunları var. Derin iç içe geçmiş if-else yapıları kullanır, bu da kodu okumayı ve sürdürülebilirliği zorlaştırır.Koşul kontrollerinin sayısı arttıkça, kodun girinti seviyesi derinleşir ve "ok şeklinde" bir kod oluşur.Hata işleme mantığı, farklı iç içe geçme seviyelerine dağılmıştır, bu da birleşik bir yönetim için elverişli değildir.Daha da önemlisi, izin verilen erişim durumunun çekirdek mantığı, birden fazla katman koşullu yargı içinde derinlere gömülü olup, sezgisel değildir. Bu kodlama tarzı sadece kod okunabilirliğini azaltmaz, aynı zamanda hata riskini artırır ve kod genişletilmesini zorlaştırır.
"Erken dönüş" yaklaşımını kullanarak bu kodu optimize edebiliriz:
"Erken dönüş" stratejisini benimseyerek, orijinal kod yapısını başarıyla optimize ettik.
Bu yöntem birkaç iyileştirme sağlar:
Farklı girdilere bağlı olarak farklı sonuçların döndürülmesi gereken senaryolarla sıkça karşılaşırız. Düzgün işlenmezse, bu mantıklar kolayca uzun if-else zincirlerine veya büyük switch ifadelerine dönüşebilir. Örneğin, bir e-ticaret platformunda, farklı sipariş durumlarına göre ilgili durum açıklamalarını döndürmemiz gerekiyor:
Bu, farklı durumlara göre farklı sonuçlar döndürülen tipik bir senaryodur. Durum sayısı arttıkça, switch ifadesi veya if-else yargıları uzar. Üstelik, bu durumda, kullanıcılar bu durum içeriklerini başka dillere çevirmek isterse, fonksiyon gövdesinin değiştirilmesi veya yeni fonksiyonların eklenmesi gerekecektir, bu da önemli bakım maliyetleri getirecektir.
Bu durumda, kodu optimize etmek için bakış tablosu yöntemini kullanabiliriz:
İlk olarak, durumlar ve açıklamalar arasındaki eşleme ilişkisini saklamak için bir Map nesnesi kullanarak, kod daha özlü hale gelir. Aynı zamanda, durum açıklamalarını yapılandırma dosyalarına taşımak kolay hale gelir, uluslararasılaştırma ve dinamik güncellemeler için kolaylık sağlar. Yeni durumlar eklendiğinde, çekirdek mantık kodunu değiştirmemiz gerekmez; sadece yapılandırmaya karşılık gelen anahtar-değer çiftlerini eklememiz yeterlidir.
Büyük yazılım sistemleri geliştirirken, genellikle birden fazla hizmet sağlayıcı veya işlevsel modülleri desteklememiz gerekir. Yazılım tasarım aşamasında arayüz odaklı programlamayı kullanmayı düşünebiliriz, böylece daha sonra genişletmeler kolaylaşır ve karmaşık sistemlerde sabit-kodlamanın getirdiği çoklu koşullu yargıların karmaşıklığı ortadan kalkar.
Birden fazla çeviri hizmet sağlayıcısını desteklemesi gereken çok dilli bir çeviri sistemi geliştirdiğimizi varsayalım. Tasarım aşamasından itibaren arayüz odaklı programlamayı düşünmezsek, gelecekteki genişletmeler çok zorlaşacaktır:
Bu uygulama, çeviri sağlayıcılarını seçmek için basit ve kaba bir if-else yapısı kullanır, bu da kodu sürdürülebilir ve genişletilebilir hale getirir. Gelecekte yeni çeviri sağlayıcıları eklerken, mevcut kodun değiştirilmesi gerekecek ve daha fazla çeviri sağlayıcısının desteklenmesi gerektiğinde, kod şişecek ve bakımı zorlaşacaktır. Aynı zamanda, bu karmaşık yöntemin birim testini yapmak da zordur çünkü farklı çeviri sağlayıcılarını simüle etmek kolay değildir.
Bu sorunları çözmek için, kodu optimize etmek için arayüz odaklı programlamayı kullanabiliriz. Arayüz odaklı programlama, polimorfizmi uygulamanın önemli bir yoludur ve farklı nesnelerin aynı mesaja farklı yanıtlar vermesine olanak tanır.
Uygulama süreci:
TranslationStrategy arayüzünü tanımlayarak ve arayüz odaklı programlamayı getirerek, aşağıdaki faydaları elde ettik:
TranslationService her çağırmada farklı çeviri stratejilerini kullanabilir.TranslationService'in çekirdek mantığını değiştirmeden.TranslationService'de durumu muhafaza etmekten kaçınma, hizmetin daha durumsuz ve iplik güvenli hale gelmesini sağlar.Koşullu ifade yapılarını optimize etmek, kod kalitesini artırmanın önemli bir yoludur. Bu makalede tanıtılan üç yöntem—savunma programlaması, bakış tablosu yöntemi ve arayüz odaklı programlama (polimorfizm ile birleştirilmiş)—her biri kendi geçerli senaryolarına sahiptir:
Gerçek geliştirme sürecinde, genellikle belirli durumlara dayalı uygun yöntemleri seçmemiz gerekebilir ve bazen birden fazla tekniği kapsamlı bir şekilde uygulamamız gerekebilir. Önemli olan, kodun basitliği, okunabilirliği ve sürdürülebilirliği arasında denge kurmak ve mevcut soruna en uygun çözümü seçmektir.
Unutmayın, aşırı optimize etmek, aşırı karmaşık koda yol açabilir. Kodu basit ve okunabilir tutmak her zaman öncelikli ilkedir. Bu teknikleri uygularken, projenin belirli ihtiyaçlarına ve ekibin teknik seviyesine dayanarak akıllıca seçimler yapılmalıdır.