2010-11-16 10 views
13

Yani,Örnek değişkenler vs parametre geçişi? Bir tartışma var mı?

Son zamanlarda bazı eski kodların yeniden faktörlendirilmesi üzerinde çalışıyorum ve yaptığım bazı yeniden yapılanma kararlarının geçerliliğini sorgulamamı sağladık. Böyle bir sorgu, bir nesne içindeki yöntemler arasında nesne paylaşımı için örnek değişkenlerin kullanımı hakkında olmuştur. Özellikle, & yöntemlerinin kurucularının ayrıldığı ve yerel değişkenlerin örnek değişkenlere yükseltildiği ve şimdi ayrı yöntemlerden erişime olanak tanıdığı bazı yerler vardır. Bu bana göre yanlış görünüyor. Bu, kapsülleme kırar kapsamını değiştirir ve yaşam döngüsünü etkileyebilir, ancak, bu sınıfların bazı performans ilişkilidir ve bu nedenle Acaba olabilir yerine geçen parametre kullanmak için bu yöntemleri yeniden faktoring ima?

Bu noktada, varsayımlarımın su tutup tutmadığını merak ediyorum. Özel yöntemler arasında paylaşım söz konusu olduğunda, örnek değişkenlere tercih edilen nesnelerin parametre geçişi mi?

cevap

8

Artı sitesinde bu şekilde, bu argümanları diğer yöntemlere aktarmanız gerekmeyecektir. Bir yöntem kod okunabilirliği (Robert Martin's Clean Code göre) en fazla üç argüman varsa hızlı azalmaya başlar. En iyi sonucu vermek için bu iki yöntemi karıştırmanız gerektiğini düşünüyorum.

Yapabilecekleriniz, mevcut bölümün bir bölümünden yeni bir sınıf çıkartabilmenizdir. Yöntemlerin yalnızca bir kısmı bu örnek alanlarını kullandığında, belki de bu yöntemler soyutlanabilir bir şey yapıyordur. Bu şekilde, kurucu argümanları veya özellikleri olarak örnek alanlarıyla yeni bir sınıf oluşturabilir ve bunları başlatabilirsiniz.

7

Kesinlikle sadece yerel değişkenleri alarak ve onlara örnek değişkenler verme edilmesi kullanmamalıydın düşünüyorum sadece etrafında geçirerek önlemek için. Bu kesinlikle zaten o sınıfını kendisi kadar bloats gerçeği de dahil olmak üzere sayılan nedenlerden dolayı iyi bir fikir değildir.

Bu örnek değişkeninin temsil ettiği şey, bu sınıfın kendisinin bir özelliği mi, yoksa genel olarak ele alınabilecek bir şey değildir. Sınıfın temsil ettiği varlığa bağlı olacaktır. Ancak, bu tasarım, sınıfın tasarımına ve belki de yeniden başlatılması gereken genel sınıf tasarımına bağlıdır. belki sen başvuruyorsunuz üstlenmeden bir örneğini sağlarsanız

, bu bağlam

+0

1 daha iyi cevap vermek için yardımcı olabilir, bu kod koku gibi gerçekten de ses yok. –