27
Clean Code
Projelerin geliştirilme aşamasında sonrası için hayat kurtarması muhtemel olan bazı dizayn prensipleri.
- Örneğin /js yolu JavaScript dosyalarını içermeli, /css yolu CSS dosyalarını içermeli gibi.
- Sınıf isimlendirmeleri o sınıftan oluşacak objeler hakkında, method isimlendirmeleri o methodun yaptığı iş hakkında, ne çok kısaltılmış ne de çok detaya girilmiş şekilde, görüldüğünde ne işe yaradığını belirtecek kadar bilgi barındırmalı.
- Fonksiyon isimlendirmeleri yapacağı işlev hakkında fiil içermeli, sınıf isimlendirmeleri içermemelidir.
- İç içe koşul kontrollerinden kaçınılmalı.
- Fonksiyonlar karmaşık olmamalı, tek işlev için tek fonksiyon kullanılmalı.
- Fonksiyonların parametre sayısı mümkün olan en az sayı olmalıdır.
- Dilin sağladığı lambda fonksiyonları kullanmak bazen kodu uzun uzun yazmaktan daha anlaşılırdır.
- Sınıflar sadece bir amaca hizmet etmelidir.
- Kodu okuyan insanlar sanki bir makale okuyormuş gibi okuyabilmelidir.
- Kodun en üst kısmında algoritme ve konsept hakkında kısa bir giriş paragrafı yapılmalı.
- Modüllerin birbirilerine müdahale etmeleri kısıtlanmalı.
- Böylelikle gevşekçe bağlı modüller üretilmiş ve kodun anlaşılabilirliği ve geliştirilebilirliği arttırılmış olur.
- Tüm testleri başarıyla geçer
- Kod tekrarı yoktur
- Geliştiricinin niyeti kolayca anlaşılır
- Sınıf ve metot sayısı minimaldir
- Fonksiyonel ortaklığı olmayan sınıflar birbirleriyle iletişim halinde olmamalıdır.
- Geliştirici doğru design patternlar kullanarak modül bağımlılığını ortadan kaldırmalıdır.
- Çalışma ortamının sağladığı formatlama fonksiyonlar bu konuda oldukça faydalıdır.
- Kodun üst tabakalarında düzenlenebilir veriler tutulmalı
- Dilin sağladığı şekilde kodun bağımlılığı azaltılmalı. Örneğin interface'ler kullanılarak ortak türler tanımlanmalı. Mantıksal bağımlılıklar doğru çalışan class'ları dahi zamanla zincirleme etkisi sonucu bozabilir.
- Mümkün olan her yerde dependecy injection yapılmalı, tekrar tanımlamadan kaçınılmalı.
- Dilin conventional standartları okuyanların daha rahat anlamasına yardımcı olur. Örneğin Java'da fonksiyon isimlendirmelerinin birden fazla kelime içermesi durumunda Camel Case kullanılması, Python'da ise büyük harfe yer verilmeyip birden fazla kelime içermesi durumunda alt tire karakteriyle ayrılması gibi.