Bir önceki blog yazımda Nesne Yönelimli Tasarım Prensipleri – SOLID üzerinde durmuştuk. Bu yazımda ise SOLID’in S’si olan Single Responsibility Principle (SRP) – Tek Sorumluluk Prensibi üzerinde duracağım.
Single Responsibility Principle (SRP) – Tek Sorumluluk Prensibi
Bir sınıfın veya metodun sadece bir sorumluluğu vardır. Bu sayede bir değişiklik yapacağımız zaman sadece bir nedenimiz olur. Peki bu ne anlama geliyor?
Resimde birden fazla işi yapan bir alet (çakı) görüyorsunuz. Bu aletin o kadar fazla sorumluluğu var ki, yeni bir sorumluluk eklemek istediğimde ya da kırılan bir parçayı değiştirmek istediğimizde yapısına müdahale etmem gerekecek. Eğer alet sadece bıçak olsaydı ya da tornavida, yani tek bir sorumluluğu olmuş olsaydı, kırılan kısmını kolay bir şekilde değiştirebilecektim. Belki yerden tasarruf edemezdim ancak zamandan tasarruf edeceğim ortada. Yazılım geliştirmede amaç her zaman en basit yöntemler kullanarak, sade ve esnek yapılar oluşturmaktır, demiştik.
Yazılımsal açıdan bakarsak nasıl bir sonuca ulaşırız? Bir sınıfımız olsun ve bu sınıfın içerisinde Allah ne verdiyse yazdığımızı düşünelim. Bir süre sonra kodun binlerce satıra ulaştığını görüyoruz. Editör bile kodları gösterirken kasılır. Bir yeri değiştirmek canımıza okur ve geçmiş yazılımcılara sevmeler başlar. Seve seve biz de aynı şeklide kodumuzu yazarız. Sonuç; büyük ve karmaşık ve yönetimi zor kodlar, kırılgan ve esnek olmayan bir yapı.
Yalnızca kendi sorumluluğunu yerine getirecek şekilde parçalara bölseydik bu sonuç ile karşılaşmayacaktık.
Örnek C# kodu:
1 | public class FullStackDeveloper |
“FullStackDeveloper” sınıfımız C#, SQL, JavaScript ve CSS kodu yazabilen bir yazılım geliştiricisini temsil etsin. Tek bir geliştiriciye bu kadar işin yüklenmesi geliştiricinin hata yapma olasılığını yükseltecektir. Çünkü, bir yerden sonra kafa çorbası içilmeye hazır hale gelecektir.
Olması gereken ise aslında şudur:
1 | public class BackEndDeveloper |
Kısacası, herkes kendi işini yapmalıdır!
Olur ya bir gün görüşemezsek iyi günler, iyi akşamlar ve iyi geceler…