Trang Chủ Blog
Tìm hiểu về nguyên lý "vàng" SOLID trong lập trình hướng đối tượng
angle-down angle-left angle-right angle-up bill-momo Asset 1 Asset 1 chat close Asset 1 creditcard dollar-circle dollar-phone dot-matrix endow entertainment facebook-circle entertainment Asset 1 gift-momo gift handshake hotline invoice license Asset 1 Asset 1 Asset 1 Asset 1 svg-note phone-circle Asset 1 Asset 1 Asset 1 search setting shopping-bag Asset 1 Asset 1 Asset 1 truck Asset 1

Tìm hiểu về nguyên lý "vàng" SOLID trong lập trình hướng đối tượng

Tìm hiểu về nguyên lý "vàng" SOLID trong lập trình hướng đối tượng

SOLID là tên viết tắt của 5 nguyên lý hợp thành lại bao gồm:

S – Single Responsibility Principle
O – Open/Closed Principle
L – Liskov’s Substitution Principle
I – Interface Segregation Principle
D – Dependency Inversion Principle

1. Single Responsibility Principle

Nguyên lý đầu tiên, tương ứng với chữ S trong SOLID. Nội dung nguyên lý:

Một class chỉ nên giữ 1 trách nhiệm duy nhất(Chỉ có thể sửa đổi class với 1 lý do duy nhất)

Một class có quá nhiều chức năng cũng sẽ trở nên cồng kềnh và phức tạp. Nếu requirement hay thay đổi, dẫn tới sự thay đổi code. Nếu một class có quá nhiều chức năng, quá cồng kềnh, việc thay đổi code sẽ rất khó khăn, mất nhiều thời gian, còn dễ gây ảnh hưởng tới các module đang hoạt động khác.

Ví dụ:

public class Student {

  public string Name { get; set;}

  public int Age{ get; set;}
  
  // Format class này dưới dạng text, html, json để in ra

  public string GetStudentInfoText(){
    return "Name: " + Name + ". Age: " + Age;
  }

  public string GetStudentInfoHTML(){
    return "<span>" + Name + " " + Age + "</span>";
  }

  public string GetStudentInfoJson(){
    return Json.Serialize(this);
  }

  // Lưu trữ xuống database, xuống file
  public void SaveToDatabase(){
    dbContext.Save(this);
  }

  public void SaveToFile(){
    Files.Save(this,"fileName.txt");
  }
}

Class Student có quá nhiều chức năng: chứa thông tin học sinh, format hiển thị thông tin, lưu trữ thông tin. Khi code lớn dần, thêm chức năng nhiều hơn, class Student sẽ bị phình to ra. Chưa kể, nếu như có thêm các class khác như Person, Teacher v…v, đoạn code hiển thị/lưu trữ thông tin sẽ nằm rải rác ở nhiều class dẫn đến khó sửa chữa và nâng cấp.
Để giải quyết, ta chỉ cần tách ra làm nhiều class, mỗi class có một chức năng riêng. Khi cần nâng cấp, sửa chữa, sẽ diễn ra ở từng class, không ảnh hưởng tới các class còn lại.

 // Student bây giờ chỉ chứa thông tin
public class Student{

  public string Name{get;set;}
  public int Age{get;set;}

}
 
// Class này chỉ format thông tin hiển thị student
public class Formatter{
  public string FormatStudentText(Studentstd){
    return "Name: "+std.Name+". Age: "+std.Age;
  }
  public string FormatStudentHtml(Studentstd){
    return "<span>"+std.Name+" "+std.Age+"</span>";
  }
  public string FormatStudentJson(Studentstd){
    return Json.Serialize(std);
  }
}
 
// Class này chỉ lo việc lưu trữ
public class Store{
  public void SaveToDatabase(Studentstd){
    dbContext.Save(std);
  }
  public void SaveToFile(Studentstd){
    Files.Save(std,"fileName.txt");
  }
}

 

DCOneService là blog cá nhân cung cấp thông tin chia sẽ lập trình, cung cụ tools tự động, coupon giảm giá dành cho Tên miền, Hosting, VPS/Server.