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 Code
kitabı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 double
para 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 private
yöntemleri bu yöntemlerin altına public
koysaydık, programın akışını takip etmek için daha çok zıplamanız gerekir.
getFirstName
ve getLastName
kavramsal olarak ilişkilidir (ve getEmployeeId
muhtemelen de öyle), bu yüzden birbirlerine yakınlar. Hepsini aşağıdan aşağıya doğru hareket ettirebilirdik, ama getFirstName
yukarıdan ve getLastName
aş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
.