Harun Özer


Proje veya dijital katalog yaptırmak için
iletişim formu doldurabilirsiniz..

<< Loose Coupling Prensibi | Single Responsibility Principle>>

Open Closed Principle -Açık Kapalı Prensibi

Yazar harunozer 29 October 2013

Open Closed Principle -Açık Kapalı Prensibi Open Closed prensibi kodun genişletilmeye açık, değiştirilmeye kapalı olması ilkesidir.

Open Closed prensibi kodun genişletilmeye açık, değiştirilmeye kapalı olması ilkesidir.

Bir uygulamada zamanla bazı geliştirmeler yapılabilir. Bu geliştirmeler yapılırken uygulamada ki sınıf, metot gibi yapılarda değişiklik yapılmasına gerek kalmaz ise kod karmaşası oluşmaz ve geliştirme daha hızlı bir şekilde yapılır. Open closed prensibinin gerekliliğini anlamak için bir senaryo üzerinden örnek geliştirelim. Senaryomuzda farklı formatlarda export yapısı geliştiriyor olalım. 

Hatalı yapımızı yukarıdaki gibi geliştiriyor olalım. Bu yapıya göre ExportBase sınıfı ve bu sınıftan türeyen ExcelExport ve PdfExport sınıfları var. ExportProcess içinde ExportBase den türemiş bir sınıf örneği tutuyor ve Export metodunu çalıştırıyor. Fakat bunun için gelen ExportBase sınıfının hangi tipte olduğunun kontrolü gerekir.
 
    class ExportBase {  }
 
    class ExcelExport:ExportBase
    {
        public void Export()
        {
            Console.WriteLine("Excel Export");
        }
    }
 
    class PdfExport : ExportBase
    {
        public void Export()
        {
            Console.WriteLine("Pdf Export");
        }
    }
 
    class ExportProcess
    {
        ExportBase e;
        public ExportProcess(ExportBase eb)
        {
            e = eb;
        }
 
        public void Export()
        {
            if (e is ExcelExport)
                ((ExcelExport)e).Export();
            else if(e is PdfExport)
                ((PdfExport)e).Export();
            else
                Console.WriteLine("Tanımsız");
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            ExportProcess p = new ExportProcess(new ExcelExport());
            p.Export();
            Console.ReadKey();
        }
    }
 
Diyelim ki bu kodlamayı yaptıktan birkaç ay sonra Xml export da yapmak istiyoruz. Bunun için ExportProcess sınıfının Export metodu içindeki kodları da düzenlememiz gerekir bu da “değiştirilmeye kapalı” kuralının bozulması anlamına gelir.
Şimdi kodumuzu Open Closed prensibine uygun hale getirelim.
Yeni class diagramımız aşağıdaki gibi olur.
 
 

 

IExport isimli bir interface oluşturup export yapan sınıflarımızda bu interfaceden türetiyoruz. ExportProcess sınıfı da bu arayüz üzerinden işlem yapıyor. Yeni bir export türü ekleyeceğimizde bu sınıfı IExport interfacesinden türetmemiz ve kullanmamız yeterli olur.
 
 
    interface IExport
    {
        void Export();
    }
 
    class ExportPdf : IExport
    {
 
        public void Export()
        {
            Console.WriteLine("Pdf Export");
        }
    }
 
    class ExportExcel : IExport
    {
 
        public void Export()
        {
            Console.WriteLine("Excel Export");
        }
    }
 
    class ExportProcess
    {
        IExport ex;
        public ExportProcess(IExport ExpClass)
        {
            ex = ExpClass;
        }
 
        public void Export()
        {
            ex.Export();
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            ExportProcess ep = new ExportProcess(new ExportExcel());
            ep.Export();
 
            ep = new ExportProcess(new ExportPdf());
            ep.Export();
            Console.ReadKey();
        }
    }
 
 
Örnek uygulamayı aşağıdaki linkden indirebilirsiniz.
 

OpenClosedPrensibi_Sample.rar

Tam Sayfa
Tags Tasarım Prensipleri,
Kategoriler Tasarım Prensipleri
İşlemler
Bu Makale 9  Kez Beğenildi.
İsim :    
e-Mail :    
Web Site :  
İmage :  
Güvenlik Kodu :  

Güvenlik Resmi
Resmi Yenile
    
Yorum :  
Tasarım Desenleri ve Mimarileri