DRY Prensibi

dry prensibi

Anlaşılması ve uygulanması en kolay prensiplerdendir. İlk kez The Pragmatic Programmer kitabıyla birlikte hayatımıza girmiştir. DRY prensibi Türkçesiyle kendini tekrarlama anlamına gelmektedir. Anlamı itibariyle kod tekrarının önüne geçmeyi hedeflemektedir.

DRY prensibi mevcut kodların işlevsel olarak kümelenerek küçük parçalara ayrılmasıyla uygulanmaktadır. Bu sayede kod tekrarı önlenerek tekrar kullanılabilirlik (reusable) arttırılmaktadır. Aynı kod bloğuna farklı bir noktada ihtiyaç duyulduğunda kopyalanması yerine parçalanarak farklı bir method haline getirilmesiyle uygulanmaktadır. Olası revizyon durumlarında değişiklik tek bir noktadan yapılacağından, kod her yerde aynı şekilde çalışacaktır. İşlevsellik küçük parçalara ayrıldığından okunabilirlik de artacaktır. Bu prensibin uygulanmasındaki kilit nokta bir kod bloğu birden fazla yerde kullanıyor ya da kullanılacaksa kesinlikle parçalanmalıdır.

Prensibi pekiştirmek adına konuyla ilgili ufak bir örnek yapalım. Bir e-ticaret projesinde siparişlerle ilgili işlemleri yöneten bir sınıfımız olduğunu düşünelim.

public class OrderManager : IOrderService
{
    public bool CreateOrder()
    {
        // Order creation processes

        var client = new SmtpClient("smtp.host");
        var from = new MailAddress("[email protected]", "User", Encoding.UTF8);
        var to = new MailAddress("[email protected]");
        var message = new MailMessage(from, to);
        message.Subject = "Order Created";
        message.Body = "Your order is created.";
        client.SendAsync(message);
        message.Dispose();
    }

    public bool CancelOrder()
    {
        // Order cancellation processes

        var client = new SmtpClient("smtp.host");
        var from = new MailAddress("[email protected]", "User", Encoding.UTF8);
        var to = new MailAddress("[email protected]");
        var message = new MailMessage(from, to);
        message.Subject = "Order Cancelled";
        message.Body = "Your order is cancelled.";
        client.SendAsync(message);
        message.Dispose();
    }
}

Sipariş oluşturma, iptal gibi işlemler sonrasında kullanıcıya durum bildirimleri e-postayla geçilmektedir. Görüldüğü üzere method içerisinde hem SOLID prensipleri ihlal edilmekte hem de kod tekrarı yapılmaktadır. Kullanıcıya başka bir method içerisinde e-posta gönderilmesi istenildiğinde aynı kodların tekrar yazılması gerekecektir. Böylece okunabilirlik daha da düşecektir. Bir değişiklik yapılacağında tüm tekrarların düzeltilmesi gerekecektir. DRY prensibi kapsamında sınıfımızı prensibe uygun hale getirelim.

public class OrderManager : IOrderService
{
    private Task SendMail(string to, string subject, string body)
    {
        var client = new SmtpClient("smtp.host");
        var from = new MailAddress("[email protected]", "User", Encoding.UTF8);
        var to = new MailAddress(to);
        var message = new MailMessage(from, to);
        message.Subject = subject;
        message.Body = body;
        client.SendAsync (message);
        message.Dispose();
    }

    public bool CreateOrder()
    {
        // Order creation processes
        
        SendMail("[email protected]", "Order created", "Your order is created.");
    }

    public bool CancelOrder()
    {
        // Order cancellation processes
        
        SendMail("[email protected]", "Order cancelled", "Your order is cancelled.");
    }
}

Görüldüğü üzere birden fazla method içerisinde tekrarlanan yapılar farklı bir method haline getirilmiştir. Bu sayede kod tekrarının önüne geçilirken yönetim ve okunabilirlik de arttırılmaktadır. E-posta gönderilmesi gibi işleve sahip methodlar yalnızca bir sınıf tarafından kullanılmayacaktır. Bu sebeple sınıftan koparılarak proje kullanımına sunulabilmesi için farklı bir yardımcı sınıf haline getirilmelidir.

You may also like...

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir