Yazılım
Prensipleri(SOLID) ve
CodeReviewCheck List
ddemirel - 20170728
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.
S
 Single Responsibility Principle
 Her yazilim biriminin (sinif, nesne, metot) tek bir sorumlulugu
olmalidir.
O
 Open/Closed Principle
 Yazilim birimleri gelistirilmeye açik, degisiklige kapali olmalidir.
 Design Patterns
 Strategy
L
 Liskov’s Substitution Principle
 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.
I
 Interface Segregation Principle
 Herseyi ihtiva eden interface siniflar yerine belli bir islemi yapan
interface siniflar olusturulmalidir.
D
 Dependency Inversion Principle
 Bagimliliklar soyut siniflara dogru olmalidir.
 Interface yönelimli programlama
 Spring DI
Code Review
Check List
CleanCode
Checklist Item 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.
Code Review
Check List
Security
Checklist Item 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
Code Review
Check List
Performance
Checklist Item 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,
Code Review
Check List
General
Category Checklist 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
Kaynakça  http://www.kurumsaljava.com

Yazılım Prensipleri ve Code Review Check List

  • 1.
  • 2.
    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.
  • 4.
    O  Open/Closed Principle Yazilim birimleri gelistirilmeye açik, degisiklige kapali olmalidir.  Design Patterns  Strategy
  • 5.
    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
  • 12.