Thảo Trịnh -
  • Chuyện đọc
  • Lập trình
    • Học nghề
    • Làm thợ
    • Agile Mindset
      • Agile Project Management (APM)
      • Tư duy linh hoạt
  • Nói chuyện vui
Thảo Trịnh -
Chuyện đọc
Lập trình
    Học nghề
    Làm thợ
    Agile Mindset
    Agile Project Management (APM)
    Tư duy linh hoạt
Nói chuyện vui
  • Chuyện đọc
  • Lập trình
    • Học nghề
    • Làm thợ
    • Agile Mindset
      • Agile Project Management (APM)
      • Tư duy linh hoạt
  • Nói chuyện vui
Công nghệ

Nguyên lý SOLID trong lập trình hướng đối tượng – và ví dụ sử dụng C# – p2

  • SOLID “S” – SRP (Single responsibility principle)
  • SOLID “O” – Open closed principle
  • SOLID “L” – LSP (Liskov substitution principle)
  • SOLID “I” – ISP (Interface Segregation principle)
  • SOLID “D” – Dependency inversion principle

Hiểu về “O” – Open closed principle

Bây giờ chúng ta sẽ tiếp tục với class Customer ở ví dụ trước. Tôi sẽ thêm một property đơn giản vào lớp này. Property này sẽ chỉ ra kiểu “customer” sẽ là “Gold” hay “Silver”.

Sau đó với một vài tính toán đơn giản với hàm “GetDiscount” chúng ta sẽ tính toán discount cho khách hàng.

Cùng xem đoạn code sau:

class Customer
{
  private int _CustType;

  public int CustType
  {
    get { return _CustType; }
    set { _CustType = value; }
  }

  public double getDiscount(double TotalSales)
  {
    if (_CustType == 1)
      return TotalSales - 100;
    else
      return TotalSales - 50;
  }
}

Xem nào, vấn đề ở đây là khi chúng ta muốn thêm một kiểu customer mới, chúng ta sẽ phải thêm 1 câu lệnh điều kiện if vào hàm “getDiscount”. Nói cách khác chúng ta cần thay đổi lớp customer.

Nếu chúng ta thay đổi lớp customer hết lần này đến lần khác, chúng ta cần chắc chắn rằng đoạn code của chúng ta phải được kiểm tra lại (tested again) để đảm bảo rằng chương trình sẽ vẫn hoạt động bình thường. Điều này thật rắc rối và mất công!!!

Vậy bất cứ khi nào bạn gặp vấn đề về “MODIFYING” thì hãy ngay lập tức nghĩ tới “EXTENSION”. Ở trường hợp cụ thể này, chúng ta có thể thêm 1 class mới như đoạn code dưới, để mỗi lần thay đổi, chúng ta chỉ việc kiểm tra lại class mới được thêm vào

class Customer { public virtual double getDiscount(double TotalSales) { return TotalSales; } } class SilverCustomer : Customer { public override double getDiscount(double TotalSales) { return base.getDiscount(TotalSales) - 50; } } Xem thêm

January 31, 2016by thaotrinh
Công nghệ

Nguyên lý SOLID trong lập trình hướng đối tượng – và ví dụ sử dụng C# – p1

Trong bài viết này chúng ta sẽ tìm hiểu về kiến trúc,  nguyên lý SOLID trong lập trình hướng đối tượng qua các ví dụ được viết bằng C#

January 11, 2016by thaotrinh

Tìm kiếm

Tags

5whys Agile Apache blockchain C# CQRS Daily Scrum database DDD deadlocks Dependency Injection Dependency Inversion Design Pattern docker ebook git Good Developer growth mindset kinh tế Pair programing Repository Retrospective Risk Management Scrum Scrumban Scrum Guide Scrum Master Senior Senior Developer singleton solid sống Technical debt UI UnitOfWork UX Viết Động lực

Bài viết mới

Hãy agile đi

Hãy agile đi

Nói chuyện về vấn đề

Nói chuyện về vấn đề

Hỏi 5 lần tại sao

Hỏi 5 lần tại sao

Tư duy linh hoạt là gì

Tư duy linh hoạt là gì

Không phải làm bao nhiêu mà là tạo ra bao nhiêu

Không phải làm bao nhiêu mà là tạo ra bao nhiêu

Một cuộc đời đáng sống

Một cuộc đời đáng sống

Chuyên mục

  • Chuyện đọc
  • Lập trình
    • Agile Mindset
      • Agile Project Management (APM)
      • Tư duy linh hoạt
    • Công nghệ
      • .NET
      • Blockchain
      • Database
    • Học nghề
    • Làm thợ
  • Uncategorized
    • Gã
    • Nói chuyện vui
    • Product
      • Design