Tek Sorumluluk İlkesi’ni gözetmek için yapılabilecek en iyi şeylerden biri, bir elemana birden fazla sorumluluk yüklememektir. Bir değişkenin, fonksiyonun ya da sınıfın (class) tek görevi olmalıdır. Fakat yine de, bazen bunun aksini uygulamamızın daha mantıklı olacağı durumlarla karşılaşabiliriz. Böyle bir durumda yapılacak en iyi şey, elemanın birincil göreviyle birlikte ikincil görevini de anlatan bir isim kullanmak olacaktır.

Eğer bir değişken, fonksiyon ya da sınıf birden şey yapıyorsa, isimde bunu gizlemek, kodu okuyan herhangi birinin yanlış yönlenmesine sebep olur. İkincil görevi yan etki olarak tanımlarsak, isimlerde yan etkilerden bahsetmek kodu daha esnek yapar. Kim bilir, belki sonradan koda bakan bir çift göz, iki görevi olan bu elemanı iki farklı elemana çevirmenin bir yolunu bulur. Böylece, sonradan da olsa Tek Sorumluluk İlkesi’ne ulaşmanın temel taşlarından birini atmış oluruz. 🙂

Örnek

<?php

class Library // Kütüphane
{
   // mainLibrary: Ana kütüphane
   private $mainLibrary = null;

   // getMainLibrary: Ana kütüphaneyi al
   public static function getMainLibrary(): Library
   {
      if (self::mainLibrary === null) {
         self::mainLibrary = new Library();
      }

      return self::mainLibrary;
   }
}

Yukarıda basit bir örneğimiz var. Library sınıfımızda bir adet $mainLibrary adlı özelliğimiz (property), bir de bu özelliği döndüren getMainLibrary adında bir fonksiyonumuz var.

İlk bakışta, isimlendirmeler gayet yerinde görünüyor. Fonksiyonumuz, sınıfımızda tanımlı ana kütüphaneyi döndürmeye yarıyor. Fakat ne yazık ki iş o kadar basit değil.

Temizlik zamanı

Fonksiyonumuz getMainLibrary, ana kütüphaneyi döndürmeden önce $mainLibrary özelliğinin daha önce tanımlanıp tanımlanmadığını kontrol ediyor. Eğer tanımlanmamışsa, yeni bir kütüphane yaratarak bunu ana kütüphane, yani $mainLibrary olarak tanımlıyor. Daha sonra da bunu döndürüyor.

Bu, açık bir yan etki. Fonksiyonun birincil işi ana kütüphaneyi döndürmek; fakat tek işi bu değil. İkincil olarak, her zaman olmasa da, yeni bir kütüphane yaratmaya da yarıyor. Bu yan etkiden, fonksiyonumuzun isminde bahsetmemiz lazım.

<?php

class Library // Kütüphane
{
   // mainLibrary: Ana kütüphane
   private $mainLibrary = null;

   // getOrCreateMainLibrary: Ana kütüphaneyi al ya da yeni yarat
   public static function getOrCreateMainLibrary(): Library
   {
      if (self::mainLibrary === null) {
         self::mainLibrary = new Library();
      }

      return self::mainLibrary;
   }
}

Fonksiyonun ismini yukarıdaki gibi değiştirdiğimizde, artık yan etkilerden de haberdar olacağız. Bu fonksiyonu kullanan biri, eline geçecek olan ana kütüphanenin, eğer hâli hazırda tanımlı değilse baştan yaratılabileceğini bilecek. Bu da, çağırdığı fonksiyonla sadece bir okuma (CRUD) yapmadığını, aynı zamanda yazmaya (CRUD) sebep olabileceğini de bilecek.

CRUD nedir?

CRUD, veritabanı gibi kalıcı depolama (persistent storage) birimlerinde kullanılan dört ana işlemi anlatan bir kısaltmadır:

  • Create: Yazma
  • Read: Okuma
  • Update: Güncelleme
  • Delete: Silme

Yorum Gönderin

Bir Cevap Yazın

%d blogcu bunu beğendi: