Aynı nesne örneğinin özel yönteminde genel yöntemi çağırmak bir kod kokusu mu?
Aynı nesne örneğinin özel yönteminde genel yöntemi çağırmak bir kod kokusu mu?
Yanıtlar:
Fena değil kokusu. Bu gerekli olabilir, neden yanlış olduğundan şüpheleniyorsun? Atom seviyesindeki bir yöntem, görevi yapan bağımsız bir varlıktır. Bir görevi yaptığı sürece, kendisine erişimi olan herhangi biri, görevi yerine getirmek için arayabilir.
Kod kokusu? Evet, gerçekten kötü bir durum değil, ama sınıfın çok fazla sorumluluğu olabileceğinin iyi bir göstergesi.
Sınıfın farklı nesnelere ayrılması gerekebileceğinin bir işareti olarak kabul edin, özel yöntemlerin kesinlikle temiz bir OO tasarımında aynı nesnenin genel yöntemlerini çağırması gerekmez.
Tabii ki, sınıfı kontrol ettikten sonra ve yöntem çağrısının nedenleri açıksa, genel olarak sınıfın özel olması için faydalı yöntemlerin olmasını beklersiniz, ancak bir tanesi yeterince faydalısa, kamuya açık olun ve diğer yöntemlerden yararlanın, bu yöntemlerin de genel olmasını beklerdim.
Tüm kod kokularında olduğu gibi, bu daha fazla kod incelemesi için bir motivasyondur, rasyonelleştirir ve belki de refaktördür, ancak alarm için bir neden değildir.
Bu sınıfın kaynak kodunu okumamış olan biri onu alt sınıfa sokmaya kalkarsa ve kamu yöntemini geçersiz kılarsa, hoş olmayan sürprizlere yol açabilir. Bunun gerçek bir endişe olup olmadığı açıkça sizin durumunuza bağlıdır. Belki de kamu yöntemini ve hatta dersi final yapmayı düşünmelisin.
Hayır. Bu durumda başka ne yapılmalı? Özel yöntemi herkese açık mı yoksa herkese açık yöntemi gizli mi yapmalısınız? Kopyala-Kodun genel yönteminden özeline mi yapıştırılması?
HAYIR , burada kötü bir koku yok.
List ile bir sıra arayüzünü uygularsak, sıranın kolayca uygulanabilmesi için doğru Liste fonksiyonlarını çağırmak kötü bir koku olabilir mi?
eğer bir şeye sahipseniz ve onu başka bir şeye (sarıcı gibi) dönüştürmek istiyorsanız, o zaman kötü bir koku değildir, kod işlev düzeyinde hareket eden tasarım deseni ile yeniden kullanılabilirliği (işlev bir nesnedir?)
Bunun eski bir yazı olduğunu biliyorum, ama işte tartıştığım bir şey. Bunu bir kod kokusu olarak kabul ediyorum ve neden bunu yapmak istediğinizi anlayamıyorum. Özel bir yöntem bir genel yöntem çağırması gerekiyorsa, genel yöntemin içeriği her iki yöntemin de arayabileceği özel bir yönteme alınmalı ve yerleştirilmelidir. Niye ya?
Genel yöntem, kodunuzu dahili olarak uyguladığınızda bir kez gerekli olmayan testler içerebilir. Bir UserObj alabilir ve örneğin kullanıcı izinlerini test etmek isteyebilir.
Bir kamu çağrısından sonra, nesneyi kilitleme zorunluluğunuz olabilir, iş parçacığı kullanıyorsanız, bu nedenle dahili olarak bir genel yönteme geri dönmek istemezsiniz.
Benim görüşüme göre dairesel hatalar ve sonsuz döngüler ve mem dışı özel durumlar dışında kalma olasılığı daha yüksektir.
Sade ve basit, kötü tasarım ve "tembel". Kamu yöntemleri dış dünyaya erişim sağlar. Zaten içerideyken dışarı çıkmak için hiçbir sebep yok.
Tersini düşünün. Özel bir yöntemle ve size ne bir kamu yöntemde işlevselliği gerek olamazdı özel birinden elde edilen kamu yöntemini çağırın. Sen ne yapardın?
Cevap, işlevselliği ortak bir yöntemde istediğinizde, bu yöntemi bu sınıfın yöntemlerinden veya diğer sınıflardan arayabilmeniz gerektiğidir.
Kodumda sıklıkla tembel yük alıcıları yaratıyorum, bu da nesnenin ilk talep edildiğinde başlatıldığını ve daha sonra aynı başlatılan nesneyi yeniden kullandığını söylüyor. Bununla birlikte, tembel bir yük kullanılarak başlatılan bir nesne, belirli bir noktada mutlaka başlatılmayabileceği anlamına gelir. Kafamı çağrılar sırasının etrafına sarmak yerine, o nesnenin zaten başlatıldığını veya başka bir yöntemde tembel bir yükün aynı kodunu tekrarladığını bildiğim için, bu nesneye ihtiyaç duyduğumda tembel yükleyiciyi çağırırım.
Genel yöntemleri akıllı bir şekilde kullanabildiğiniz gibi, bunları yanlış da kullanabilirsiniz. Buna bir örnek, başka bir özel yöntemi çağırmadan önce parametrelerini işleyen genel bir yöntem olabilir. Aynı parametrelere sahip olduğunuz için bu ortak yöntemi rasgele olarak adlandırmak yanlış olur. Hata incedir ancak her şeyden çok bir tasarım hatasıdır ve kamu yönteminin parametreleri yerine iç yöntem parametreleriyle yönetmeyi öğrenmenizi gerektirir.
Sorunuzu cevaplamak için, doğru kullanıyorsanız kesinlikle kötü bir kod değil.
Kendine sorman gereken soru, sınıfının neden sınıfının müşterileriyle aynı ihtiyaca sahip olduğudur? Genellikle bir sınıfın müşterilerinden çok farklı ihtiyaçları vardır. Öyleyse evet, bu senin de bir göstergesi
(a) özel olması gereken herkese açık olarak göstermek veya
(b) sınıfın davranışı yeterince dar değil (tek sorumluluk ilkesi düşünün).