Java'da, özel yardımcılar genel yöntemlerin altına mı girmeli? [kapalı]


24

Bir iş arkadaşımın ve Java sınıflarımızdaki yöntemlerin sıralanmasında karşıt uygulamaların olduğunu fark ettim. İçimizden biri ana kamu yöntemleriyle sınıfa başlıyor ve ardından özel yardımcıları daha sonra ortaya koyuyor. Diğerimiz, kamu yöntemlerinin en sonunda olduğundan emin oluyor.

Açıkçası, bu sadece bir stil sorunu ve doğru cevap yok. Ancak, bu konunun bir başka Yook-Zooks savaşı olduğuna karar vermeden önce ve bir veya diğerini keyfi olarak seçmeden önce, standart bir Java stili rehber önerisi veya bir yaklaşımın diğerinden daha iyi olmasının pratik bir nedeni olup olmadığını merak ediyordum.


13
Önemli değil. Yazı tura atmak. Birini seç. Yapıştır.


@KilianFoth - Bu soru 3 ay önce soruldu ve daha fazla cevabı var. Bu, söz konusu soruyu bu sorunun bir kopyası haline getirmez mi?
Brandon Yarbrough

Yanıtlar:


25

Normal olarak tercih edilmekle birlikte, kesinlikle kuruluşunuzdaki ortak bir standarda uymaya çalışmalısınız. Neye karar verirsen ver, bir standart seç ve evrensel olarak kabul et.

Seçeceğinize göre, Temiz Kod'da sunulan önerileri izlerseniz, dosyayı bir gazete makalesi gibi yukarıdan aşağıya doğru okuyabilirsiniz; bu, doğal olarak yardımcı yöntemlerin , kullandıkları yöntemlerden sonra görünmesini önerir. yardım ediyor. Bu, kod yapısının maksimum okunabilirliğine yol açacaktır. Eğer sahip olsaydın

public void doSomething()
{
     helpMe();
     helpMeAgain();
}

Dosyanız şu şekilde yapılandırılmış

public void doSomething() { }
private void helpMe() { }
private void helpMeAgain() { }

Bunun bir başka yan etkisi, yardımcılarınızın kendi yardımcılarına sahip olduğunu keşfetmenizdir ve gerçekte neye sahip olduğunuzu çözmenize yardımcı olur ve dosyanızda yaşayan başka bir sınıf olduğunu ve bu yöntemler olduğundan, kendi sınıfına çıkarmak için temiz bir şekilde yeniden yönlendirebilirsiniz. Zaten sırayla birlikte gruplandırılmış. Ancak bu ikincil bir yarar.


Bunu söylemene sevindim, yoksa söylerdim. Bob Martin'e 2 yöntemden birinin 3. yöntemi kullanması durumunda nasıl sipariş verdiğini sordum. Bu durumda diğer ikisinin altına üçüncüyü koyar.
Daniel Kaplan,

1
Örneğiniz bunu göstermiyor, ancak bu özel yöntemler arasında karma genel yöntemlere yol açıyor. Bu tekniği kullanıyorum, ancak çoğu zaman kendimi yırtılmış hissediyorum ve tüm kamu yöntemlerini en üst düzeye çıkarmak istiyorum çünkü kamu arabirimini kolayca okumak için söylenecek çok şey var.
Sean,

@Sean, peki, genellikle sınıfımın genel API'sini sınırlamaya çalışacağım veya uygunsa cephesi olarak bırakacağım ancak uygulama yardımcılarını işbirlikçilerin içine çekeceğim. Test, refactor, özü, tekrarlayın. Ama elbette ne kadar ileri gitmek istediğine bağlı. Sınıflarımı küçük tercih ederim.
Anthony Pegram,

11

Genel yöntemler sınıfın arayüzüdür. Sınıfınızı kullanmakla ilgilenen biri yalnızca arayüzü önemser. Bir sınıf kullanıcısı açısından, kaydırmayı azaltmak için önce genel yöntemlere sahip olmak yararlı olacaktır.


5

C ve C ++ 'da yardımcı yöntemler genellikle ilk olarak konur, çünkü o zaman bir bildirime gerek kalmaz. Pek çok insan bu alışkanlığı önemli olmadığı başka dillere taşıdı.

Genel yöntemleri en çok tercih ederim çünkü genellikle bir dosyayı açtığımda genel arayüzünü arıyorum. Tüm uygulama detaylarını kaydırmak zorunda kalmak istemiyorum. Aynı zamanda gördüğüm en popüler tarz oldu, o yüzden kongre için söylenecek söz var.


2

Sınıftaki metotların sırasını görünürlük değil okunabilirlik ve bağlam temeline dayandırmayı seviyorum.

yani bir 'açık' yöntem muhtemelen bir 'kapanıştan' öncedir. İki ortak yöntem 'a' ve 'b' özel 'c' olarak adlandırılırsa ve onu çağıran yalnızca onlarsa - o zaman 'c'nin yanlarında olmasını isterim.

Görünürlüğe dayanan bir yöntem siparişi sözleşmesinin iyi bir şey olduğunu sanmıyorum.


1

Sınıflarımı, önem / görünürlük sırasına göre listelenen sınıflarımı görmeyi tercih ediyorum (burada önemine göre, kamuoyu arayüzü üzerinde doğrudan etkisi olan).

Bu nedenle, özel fonksiyonların aşağı itilme eğilimi vardır.

Bununla birlikte, benzer işlevleri birlikte gruplama eğiliminde olacağım gibi istisnalar da var;

Bu, dediğiniz gibi, bir zevk meselesidir.

Ancak, benim olmayan kod üzerinde çalışırken, projede kullanılan sözleşmeleri takip etmeye çalışacağım.

Bunu takip etmem için bulduğum güzel bir yol (burada Eclipse ile çalıştığınızı varsayarak) bir kod biçimlendirme yapılandırması oluşturmak ve bunu proje kaynağıyla dışa aktarmak ve kaynak denetimine adamaktır. Bu şekilde, proje için en son ve en büyük kod sözleşmesi, kurulum ve kurulum için bir kaç tıklatma yapmaktan ibaret olan CTRL-SHIFT-F jufore'nin bir çok tartışmayı engellemesidir.

Otomatik biçimlendirici kullanmanın bir başka avantajı da, sizi her ne kadar geleneksel olursa olsun, sizi mutlu eden ve sadece onaylamadan önce kodu biçimlendirebileceğiniz şeyler yapabilmenizdir. Söz konusu sözleşmeye ve biçimlendirme aracına bağlı olarak YMMV.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.