SOLID
Single responsibility
Open-closed
Liskov substitution
Interface segregation
Dependency inversion
SOLID yazılım tasarım prensipleri için kullanılan bir kısaltmadır.
Yazılım yaparken SOLID uygulandığı taktirde bakımı ve
geliştirilmesi kolay yazılım sistemleri oluşturmak mümkündür. En
verimli hali test güdümlü yazılım ile uygulanır.
3.
S
Single ResponsibilityPrinciple
Her yazilim biriminin (sinif, nesne, metot) tek bir sorumlulugu
olmalidir.
L
Liskov’s SubstitutionPrinciple
Alt siniflardan olusturulan nesneler üst siniflarin nesneleriyle yer
degistirdiklerinde ayni davranisi göstermek zorundadirlar.
Printer
*print
-(A)Laser
*print
-(B)Dot Matrix
*print
-(C)Laser Printer and Scanner
*print
*scan???
C alt class’ını kullanarak scan işlevini
kullanabilimek instanceof ile sınıfın
Türü tespit edilip kontrol edilmelidir.
6.
I
Interface SegregationPrinciple
Herseyi ihtiva eden interface siniflar yerine belli bir islemi yapan
interface siniflar olusturulmalidir.
7.
D
Dependency InversionPrinciple
Bagimliliklar soyut siniflara dogru olmalidir.
Interface yönelimli programlama
Spring DI
8.
Code Review
Check List
CleanCode
ChecklistItem Category
Yaptığı işi açıklayan isimler kullanın.
Meaningful
Names
Uygulama genelinde aynı işi yapan nesnelere
aynı ismi kullanın.
Meaningful
Names
Classlar kısa olmalı. Classes
Metodlar kısa olmalı. Functions
Fonksiyonlar yalnız bir iş yapmalı. Functions
Aynı işi yapan fonksiyonlar yazmayın. Functions
Code commentler oluşturmak yerine kodu daha anlamlı
hale getirin. (İsimlendirme vb. konulara dikkat edin.)
Comments
Kodları formatlayın. Formatting
Metodlardan hatalı durumlar için sonuç kodu
dönmek yerine özel exceptionlar oluşturun.
Exceptions
Siniflar içerisine eklenmis fakat kullanilmayan isim
uzaylari (namespaces) kaldirilmali,
Formatting
Kritik kod bloklari için try catch kullanimi ve boş catch
blogunun olmadigina emin olunmali,
Try/Catch bloklarının içeriğini anlamlı ismi olan ayrı
metodlara ayırın.
Çok uzun olan döngüler var ise bunlar ayrı bir metot
haline getirilmeli ve açıklamasi yazılmalı,
Çok fazla açiklama yer aliyorsa bunlar kisaltilmali hatta
methot seviyesinde degil sinif seviyesinde kod açiklamasi
yapilmasi önerilmelidir.
Interface’leri gereğinden fazla büyütmeyin.
Gerekli olmadıkça kalıtım kullanmayın, sınıflara yeni
davranışları interfaceler ile eklemeye gayret edin.
9.
Code Review
Check List
Security
ChecklistItem Category
Kalıtımı yapılmayacak classları final olarak belirleyin. Fundamentals
Kod tekrarını önleyin. Fundamentals
Classlara ve metodlara erişimi olabildiğince kısıtlayın. Fundamentals
Sistemde kullanılacak dataları doğrulayın. Size/range vb. Denial of Service
Fazla log oluşturmayın. Denial of Service
Önemli verileri loglamayın. Confidential Information
Dinamik SQL kullanmayın, prepared statement
özelliğini tercih edin.
Injection Inclusion
Public static fieldleri erişilen yerlerden değiştirilmemesi
için
final yapın.
Mutability
Hassas verilerin olduğu(login vb.) classları serializable
yapmayın.
Serialization Deserialization
10.
Code Review
Check List
Performance
ChecklistItem Category
Fazla Synchronized işleminde kaçının. Concurrency
Synchronized blokları oldukça küçük tutun. Concurrency
String birleştirme işleminden kaçının,
StringBuffer kullanın.
General Programming
Gereksiz obje oluşturmayın. Creating and Destroying Objects
Mümkün oldugunca Global degisken tanimlamamaya
özen göstermek gerekir ve degisken kullanilacagi yerden
hemen önce tanimlanmali ve kapsami(scope) kisa
olmasina dikkat edilmelidir,
11.
Code Review
Check List
General
CategoryChecklist Item
Checked exceptionlar kullanmayın. Exceptions
Standart exceptionları kullanmaya gayret edin.
IllegalArgument vb.
Exceptions
Exceptionları pasif etmeyin. Exceptions
Null değer dönmek yerine boş dizi ya da collections
değeri dönün.
Methods
Class ve class üyelerine erişimi kısıtlayın. Classes and Interfaces
Local değişkenlerin geçerlilik alanını olabildiğince küçük
tutun.
General Programming
Genel isimlendirme kurallarına uyun. General Programming
Her zaman hashCode ve equals metodlarını override
edin. Özellikle Entity ve DTO gibi classlarda yapılması
önemlidir.
General Programming
toString metodunu classlara uygun olarak override edin. General Programming
Sabit değişkenler yerine Enum kullanın. Enums and Annotations