C# Solid Principles - Single Responsibility(Tek Sorumluluk)

Design Patterns Çağrı ŞİŞMAN 22.8.2016

Nesne yönelimli programlama (OOP) dilleri ile uygulama geliştirdiğimizde, uygulamalarımızda sınıflar,arayüzler ve metotlar kullanıyoruz. Böylelikle uygulamamız farklı şablonlara ve yöntemlere sahip birbirleriyle etkileşim halinde olan nesneler biçiminde yükseliyor. Bu nesnelerin de birbirlerine ne kadar bağlı olduğunu ve bu bağımlılığın da uygulama tasarımı dikkate alınmadığında ne gibi zorluklar çıkarabileceğini dikkate almak durumundayız.

SOLID ilkeleri bu bağımlılıkların yönetilmesi ve daha uygun bir uygulama tasarımının gerçekleştirebilmesi amacıyla ortaya konulan ilkeleri kapsar. Adını bu ilkelerin ilk harflerinin birleştirilmesiyle alır. 

Şimdi bu ilkeleri örneklerle açıklamaya çalışalım.

1-) Single Responsibility (Tek Sorumluluk): Tek sorumluluk prensibi, adından da anlaşılacağı üzere her sınıfın bir sorumluluğu olmasını ifade eder. Her sınıf kendisine ait işleri gerçekleştirilmeli ve bu iş değişecek ya da gelişecekse
o sınıfı kapsamalıdır.

public class CargoManager
{

    public void GetCargoInformation(DateTime startDate, DateTime endDate)
    {

        //Getting cargo detail information between startDate and endDate
    }

    public void SetCargoStatus(int cargoId)
    {

        //Update cargo status with cargoId
           
        SendSms(cargoId);


    }

    public void SendSms(int cargoId)
    {

        //Send sms for cargo information
    }

}

 

Yukarıdaki kod bloğuna baktığımızda CargoManager sınıfı kargo ile ilgili işlemleri yaparken aynı zamanda Sms gönderme ile ilgili de bir işlem yapmakta. Yani ilgili sınıfa birden fazla sorumluluk yüklemiş durumdayız. Peki bu ne gibi sorunlara yol açabilir?

- Sms ile ilgili bir değişiklik yapmamız gerekirse bunu CargoManager sınıfı içerisinde gerçekleştirmemiz gerekecek.

- Başka bir sınıf içerisinde de sms gönderimi yapmamız gerekebilir. Dolayısıyla aynı yöntemi o sınıf içerisinde de kullanırsak hem kod tekrarı yapmış olacağız, hem de değişiklikler birçok sınıfı etkileyecek.

 

Dolayısıyla Sms işlemlerini ayrı bir sınıfın sorumluluğuna verirsek ne gibi bir değişim olacak ona bakalım.

public class SmsManager
{

    public void SendSms(int cargoId)
    {

       //Send sms for cargo information
    }

}

 

Sms gönderim işini ayrı bir sınıfın sorumluluğuna verdik. Şimdi CargoManager içinde kullanımına bakalım.

 

public class CargoManager
{


    private SmsManager _smsManager=new SmsManager();

    public void GetCargoInformation(DateTime startDate, DateTime endDate)
    {

        //Getting cargo detail information between startDate and endDate
    }

    public void SetCargoStatus(int cargoId)
    {

        //Update cargo status with cargoId
        _smsManager.SendSms(cargoId);


    }
}

 

Sms işlemleri ile ilgili değişiklik yapmak istediğimde artık bu işlemi SmsManager sınıfı içerisinde yapabiliriz. Bu da sınıflar içerisindeki iş değişikliğini ve geliştirimlerini daha kolay bir şekilde yapabilmemize olanak sağlar.

İyi çalışmalar.

 

 


Etiketler: C#