S.O.L.I.D. Prensipleri

0 1.932

SOLID prensipleri Clean Code kitabından da tanıyacağımız Robert Cicil Martin’in isimlendirdiği prensiplerdir. İsimlendirdiği diyorum çünkü bu prensiplere isim koymadan önceden de bunlar zaten yapılmaya çalışılıyor ve problem olduğu anlaşılıyordu.

  • S – Single-responsiblity principle
  • O – Open-closed principle
  • L –  Liskov substitution principle
  •  I –  Interface segregation principle
  • D – Dependency Inversion Principle

Single-Responsiblity Principle 

Bir class’ın ve bir metodun tek bir işten sorumlu olmasıdır. Bir entity class’ı sadece sadece kendi özelliklerini barındırıp bu özelliklere ait getter / setter metodları içermelidir. Bu görevinin yanında log’lama işini yapmamalıdır. Bir metod ise sadece ismindeki işi yapmalı, alt iş parçacıklarını farklı metodlara aktarmalı ve bu şekilde bu metodun sorumluluğunu teke indirmeliyiz. Bu şekilde kodumuz daha okunabilir ve anlaşılabilir olmaktadır.

Yukarıdaki gibi bir sınıf her işi kendi üzerine alıp kendisi ile alakalı olmayan bütün işleri yapmaktadır. Metodları doğru class’lara alarak daha geliştirilebilir, birbirine daha bağımlı ve esnek bir yapı sağlamış oluruz.

Open-Closed Principle

Müşterilerin problemleri zaman içinde değişebilir ve bizler bu ihtiyaçlara yönelik uygulamalar geliştirmeliyiz. Projeler genellikle ilk istenilen özellikler ile yaşamına devam etmez. Müşterilerden yeni istekler gelir ve bu durum ise yazılımda sürekli geliştirme yapmamız anlamına gelmektedir.

Değişiklik kaçınılmazdır ve bu değişiklikleri önceden tahmin etmeniz zordur. Eğer projeyi agile yöntemlerden biriyle geliştiriyorsanız bildiğiniz gibi ileride kullanırım dediğiniz bir özelliği implemente etmemeniz gerekir. Agile’ın ruhuna aykırıdır. 😀

Bu değişikliklere ayak uydurabilmek adına esnek bir tasarım oluşturmak gerekir.

“Uygulamarımız gelişime açık değişime kapalı olmalıdır.” Bertrand Meyer

Liskov Substitution Principle

Kelime manası yerine geçme olan bu prensip, kalıtım alarak türeyen class’lar kalıtım aldığı üst class’ın bütün özelliklerini kullanması gerektiğidir. Aksi takdirde zaten tasarımı yanlış yaptığımız ortadadır.

Interface Segregation Principle

Bu prensip ise Liskov prensibini doğrulacayacak şekilde olup bir interface’in gereksiz yeteneklere yani metodlara sahip olmaması gerektiğini söyler. Böylece bu interface’i implement eden class’lar da bu metodu override etmek zorunda kalmazlar.

Dependency Inversion Principle

Somut sınıflar değişime uğramaya açıktır bu sebepten bağımlılıklar soyut sınıflar ve interface’ler kullanılarak yönetilmelidir. Bu sayede bağımlılık direkt olarak somut bir sınıfa olmaz ve araya bir soyutlama kavramı girer.

Kaynak:  Pratik-Agile Özcan ACAR

 

Email adresiniz yayınlanmayacaktır.