Bazı programlama dillerinde, sipariş önemlidir, çünkü ilan edilene kadar işleri kullanamazsınız. Ancak bunun dışında çoğu dil için derleyici için farketmez. Öyleyse, insanlara önem vermekten vazgeçtin.
En sevdiğim Martin Fowler alıntı: Any fool can write code that a computer can understand. Good programmers write code that humans can understand.Sınıfınızın sıralamasının insanların anlamasını kolaylaştıran şeylere bağlı olması gerektiğini söyleyebilirim.
Ben şahsen Bob Martin'in Clean Codekitabında verdiği düşürücü tedaviyi tercih ediyorum . Sınıfın en üstündeki üye değişkenler, ardından yapıcılar, sonra diğer tüm yöntemler. Ve bu yöntemlerin sınıf içinde nasıl kullanıldığına yakın bir şekilde yaklaşmasını emredersiniz (keyfi bir şekilde herkesi daha sonra özel ve sonradan korunmak yerine). Buna "dikey mesafeyi" veya bunun gibi bir şeyi en aza indirgeme diyor (şu anda üzerimde kitap yok).
Düzenle:
"Dikey mesafe" nin temel fikri, insanların sadece kaynak kodunuzun etrafından dolaşmasını sağlamaktır. İşler birbiriyle ilgiliyse birbirine yakın olmalılar. İlgisiz şeyler daha uzak olabilir.
Temiz Kod'un 5. Bölümü (büyük kitap, btw), Bay Martin'in sipariş kodunu nasıl önerdiği konusunda bir ton ayrıntılı bilgi veriyor. Okuma kodunun bir gazete makalesini okumak gibi çalışması gerektiğini önerir: üst düzey detaylar önce gelir (en üstte) ve okudukça daha fazla ayrıntı alırsınız. “Eğer bir işlev diğerini çağırırsa, dikey olarak yakın olmalı ve eğer mümkünse arayan arayan ucunun üzerinde olmalıdır” diyor. Ek olarak, ilgili kavramlar birbirine yakın olmalıdır.
İşte burada, birçok yönden kötü olan (zayıf OO tasarımı; asla doublepara için kullanmayın ) fakat fikri açıklayan bir örnek var :
public class Employee {
...
public String getEmployeeId() { return employeeId; }
public String getFirstName() { return firstName; }
public String getLastName() { return lastName; }
public double calculatePaycheck() {
double pay = getSalary() / PAY_PERIODS_PER_YEAR;
if (isEligibleForBonus()) {
pay += calculateBonus();
}
return pay;
}
private double getSalary() { ... }
private boolean isEligibleForBonus() {
return (isFullTimeEmployee() && didCompleteBonusObjectives());
}
public boolean isFullTimeEmployee() { ... }
private boolean didCompleteBonusObjectives() { ... }
private double calculateBonus() { ... }
}
Metotlar emredildi, böylece onları en baştan aşağıya çağıran, onları arayanlara yakınlar. Tüm privateyöntemleri bu yöntemlerin altına publickoysaydık, programın akışını takip etmek için daha çok zıplamanız gerekir.
getFirstNameve getLastNamekavramsal olarak ilişkilidir (ve getEmployeeIdmuhtemelen de öyle), bu yüzden birbirlerine yakınlar. Hepsini aşağıdan aşağıya doğru hareket ettirebilirdik, ama getFirstNameyukarıdan ve getLastNameaşağıdan görmek istemeyiz .
Umarım bu size temel bir fikir verir. Bu tür bir şeyle ilgileniyorsanız, okumanızı şiddetle tavsiye ederim Clean Code.