Daha önce etrafa bakındığımda, uzun yöntemlerin kötü uygulama olduğu konusunda bazı yorumlar gördüm.
Uzun yöntemlerin kötü olduğuna her zaman katılıyorum (ve başkalarından görüş almak istiyorum) emin değilim.
Örneğin, nesneleri görünümüne göndermeden önce biraz işlemden geçiren bazı Django görünümlerine sahibim, uzun bir yöntem 350 satır kodlu. Kodumu yazdım, böylece parametrelerle başa çıkabiliyor - queryset'i sıralama / filtreleme, ardından bit bit sorgumun döndürdüğü nesneler üzerinde biraz işlem yapıyor.
Bu nedenle, işleme esas olarak koşullu toplamadır, veritabanında kolayca yapılamayacak kadar karmaşık kuralları vardır, bu yüzden ana döngü dışında bildirilen bazı değişkenler var, sonra döngü sırasında değiştirilebiliyorum.
variable_1 = 0
variable_2 = 0
for object in queryset :
if object.condition_condition_a and variable_2 > 0 :
variable 1+= 1
.....
...
.
more conditions to alter the variables
return queryset, and context
Bu yüzden teoriye göre, tüm kodu daha küçük yöntemlere ayırmalıyım, böylece görüntüleme yöntemini en fazla bir sayfa uzunluğunda olarak almalıyım.
Bununla birlikte, geçmişte çeşitli kod tabanları üzerinde çalışmış olsam da, bazen, en dıştaki yöntemi kafanızda tutarken sürekli olarak bir yöntemden diğerine atlamanız gerektiğinde, kodu daha az okunabilir kıldığını düşünüyorum.
İyi biçimlendirilmiş uzun bir yönteme sahip olmanın mantığını daha kolay görebiliyorum, çünkü içsel yöntemlerde saklanmıyor.
Kodu daha küçük yöntemlere ayırabilirim, ancak genellikle iki veya üç şey için kullanılan bir iç döngü vardır, bu yüzden daha karmaşık bir kodla sonuçlanır veya bir veya iki veya üç şeyi yapmayan yöntemler (alternatif olarak) Her görev için iç döngüleri tekrarlayabilirdim, ama sonra bir performans düşmesi olacak).
Öyleyse uzun yöntemlerin her zaman kötü olmadığı bir durum var mı? Yazma yöntemleri için, sadece bir yerde kullanılacağı zaman her zaman bir durum var mı?
GÜNCELLEME: Bu soruyu bir yıl önce sormuştum.
Bu yüzden, buradaki (karışık) cevaptan sonra kodu yeniden düzenledik, yöntemlere böldüm. Veritabanından karmaşık ilgili nesne kümelerini alan bir Django uygulamasıdır, bu nedenle test argümanı yok olmuştur (muhtemelen test senaryoları için ilgili nesneler oluşturmak muhtemelen yılın çoğunu almış olacaktır. kimse şikayet etmeden önce çalışma ortamı). Kodun bu bölümündeki hataları düzeltmek artık çok kolay, ancak çok büyük değil.
önce :
#comment 1
bit of (uncomplicated) code 1a
bit of code 2a
#comment 2
bit of code 2a
bit of code 2b
bit of code 2c
#comment 3
bit of code 3
Şimdi:
method_call_1
method_call_2
method_call_3
def method_1
bit of (uncomplicated) code 1a
bit of code 2a
def method_2
bit of code 2a
bit of code 2b
bit of code 2c
def method_3
bit of code 3