Computer >> Máy Tính >  >> Lập trình >> C#

Làm thế nào để thực hiện nguyên tắc Mở Đóng bằng C #?

Các thực thể phần mềm như lớp, mô-đun và chức năng phải mở để mở rộng nhưng đóng để sửa đổi.

Định nghĩa - Nguyên tắc Đóng mở nói rằng việc thiết kế và viết mã phải được thực hiện theo cách mà chức năng mới sẽ được bổ sung với những thay đổi tối thiểu trong mã hiện có. Thiết kế phải được thực hiện theo cách cho phép thêm chức năng mới dưới dạng các lớp mới, giữ nguyên mã hiện có càng nhiều càng tốt.

Ví dụ

Nguyên tắc đóng trước khi mở

using System;
using System.Net.Mail;
namespace SolidPrinciples.Open.Closed.Principle.Before{
   public class Rectangle{
      public int Width { get; set; }
      public int Height { get; set; }
   }
   public class CombinedAreaCalculator{
      public double Area (object[] shapes){
         double area = 0;
         foreach (var shape in shapes){
            if(shape is Rectangle){
               Rectangle rectangle = (Rectangle)shape;
               area += rectangle.Width * rectangle.Height;
            }
         }
         return area;
      }
   }
   public class Circle{
      public double Radius { get; set; }
   }
   public class CombinedAreaCalculatorChange{
      public double Area(object[] shapes){
         double area = 0;
         foreach (var shape in shapes){
            if (shape is Rectangle){
               Rectangle rectangle = (Rectangle)shape;
               area += rectangle.Width * rectangle.Height;
            }
            if (shape is Circle){
               Circle circle = (Circle)shape;
               area += (circle.Radius * circle.Radius) * Math.PI;
            }
         }
         return area;
      }
   }
}

Mã sau nguyên tắc mở

namespace SolidPrinciples.Open.Closed.Principle.After{
   public abstract class Shape{
      public abstract double Area();
   }
   public class Rectangle: Shape{
      public int Width { get; set; }
      public int Height { get; set; }
      public override double Area(){
         return Width * Height;
      }
   }
   public class Circle : Shape{
      public double Radius { get; set; }
      public override double Area(){
         return Radius * Radius * Math.PI;
      }
   }
   public class CombinedAreaCalculator{
      public double Area (Shape[] shapes){
         double area = 0;
         foreach (var shape in shapes){
            area += shape.Area();
         }
         return area;
      }
   }
}