SOLID kavramı, tüm yazılımcıların yazılım geliştirirken dikkate alması gereken prensipleri oluşturur. Bu prensiplerin amacı tamamen esnek ve temiz kod oluşturarak; kod tekrarını engellemek, kodları sürdürülebilir ve anlaşılır kılmaktır. Robert C. Martin tarafından ileri sürülmüştür, kısaltması ise Michael Feathers tarafından düşünülmüştür.

SOLID Prensipleri ise bir Nesne Tabanlı Programlama dili ile yazılım geliştirirken uyulması gereken kurallardır. Bu kurallar, kodlardaki karmaşıklığı önler. SOLID Kavramı 5 ana başlık altında oluşmaktadır.

Single Responsibility Principle,
Open/Closed Principle,
Liskov Subtitution Principle,
Interface Segregation Principle,
Dependency Inversion Principle

 

S – Single Responsibility Principle

Bu ilkeye göre bir sınıfa veya fonksiyona birden fazla iş verip onu birçok işten sorumlu tutmamalıyız. Sınıfın ya da fonksiyonun yapması gereken yalnızca bir işi olması gerekir.

 

O – Open/Closed Principle

Bu prensipte amaç sürdürülebilir ve tekrar kullanılabilir yapıda kod yazmanın temelini oluşturmaktır. Projede geliştirilen nesnelerin geliştirilmeye açık ancak değişime kapalı olmaları gerekir. Yani, bir nesne davranışını değiştirmeden yeni özellikler kazanabilmelidir.

 

L – Liskov Substitution Principle

Bu prensipteki amaç ise miras olarak oluşturulan sınıfların önce miras aldıkları nesnenin tüm özelliklerini kullanması, daha sonra ise kendi özelliklerini barındırması gerekir. Eğer oluşturulan sınıf miras aldığı sınıfın bütün özelliklerini kullanamıyorsa gereksiz bir kod bloğu oluşturulmuş olur ve bu da “clean code” için istenmeyen bir şeydir.

 

I – Interface Segregation Principle

 

interface1

 

Bir interface için çok fazla sorumluluk oluşturmak yerine, daha da özelliştirilen birden fazla interface oluşturulmalıdır. Nesneler, ihtiyacı olmayan özellik veya metotlar içeren interfaceleri miras almamaya zorlanmamalıdır. Interface Segregation prensibi, Single Responsibility prensibi ile neredeyse aynıdır. Ancak burada dikkat edilmesi gereken husus bu prensip Interface ile ilgilenirken, Single Responsibility Sınıflar veya metotlar ile ilgilenir.

 

D – Dependency Inversion Principle

 

dependency inversion

 

Bu prensipteki amaç da bağımlılıkların en az seviyeye indirilmesidir. Yani, alt sınıflarda yapılan değişikler üst sınıfları etkilememelidir. Bu problemi çözmek için ise üst seviye sınıf ile alt seviye sınıf arasında soyutlama katmanı oluşturarak her iki sınıfı da soyut kavramlar üzerinden yönetmemiz gerekir.

Aslında, Dependency Inversion kavramı için Dependency Injection için bir çözüm yöntemidir diyebiliriz. Buraya tıklayarak “Dependency Injection” konusunu inceleyebilirsiniz.