12/08/2018, 18:07

Tìm hiểu về nguyên lý "Composition over Inheritance"

Vào những ngày đầu được join dự án thực tế lúc ấy khá là non nớt và còn chưa biết nhiều về cách thiết kế chương trình hay làm sao để chương trình của mình được viết một cách tối ưu nhất, thời điểm đấy team tôi thiếu người và leader lại bận "sm" vì phải care cùng lúc 2 projects, tôi nhận được task ...

Vào những ngày đầu được join dự án thực tế lúc ấy khá là non nớt và còn chưa biết nhiều về cách thiết kế chương trình hay làm sao để chương trình của mình được viết một cách tối ưu nhất, thời điểm đấy team tôi thiếu người và leader lại bận "sm" vì phải care cùng lúc 2 projects, tôi nhận được task là phải thiết kế base cho một con module khá là phức tạp và rất nhiều xử lý logic, quả là một cơ hội nhưng mà cũng là một thử thách lúc đó đối với tôi. Sau một lúc suy nghĩ và lên ý tưởng tôi bắt đầu viết những dòng code đầu tiên theo ý tưởng kế thừa trong OOP tuy nhiên sau khi gửi pull request tôi đã nhận được không ít "gạch đá" à nhầm "comments".

Hì hục ngồi thiết kế đi thiết kế lại làm sao cho sau này dễ dàng phát triển mở rộng và có thể giải quyết được những trường hợp "dị dị" khi khách hàng yêu cầu, may mắn tôi được một tiền bối suggest em nên thiết kế con base này theo kiểu Composition over Inheritance và đương nhiên tôi bắt đầu tìm hiểu về nguyên lý này vì trước đó khi ngồi trên ghế nhà trường hay thời gian thực tập tôi chưa từng nghe đến khái niệm trên. Sau khi áp dụng nó đã giải quyết được những vấn đề nhức đầu mà tôi gặp phải, bài viết dưới đây chúng ta sẽ cùng tìm hiểu về nguyên lý "Composition over Inheritance" và lợi ích của nó nhé.

Vì lý do bảo mật của dự án nên mình sẽ chỉ lấy một ví dụ demo be bé sau để chúng ta cùng xem tìm hiểu nhé. Vào một ngày cuối tuần đẹp trời ngẫu hứng bạn muốn làm một game đơn giản để lòe với bọn bạn hay ghi điểm với người yêu, giả sử trò chơi được thiết kế như sau đầu tiên chúng ta cần một chú chó và dĩ nhiên chó thì phải "sủa" rồi, chương trình của chúng ta sẽ có dạng như sau:

Dog
  .bark()

Tiếp tục nhé chúng ta thêm một đối tượng "cat" vào:

Cat
  .meow()

Game bắt đầu sinh động hơn rồi đây. Cũng như bao con vật khác chúng đương nhiên phải lớn lên khi đó ta bổ sung thêm function grow()

Dog
  .grow()
  .bark()
Cat
  .grow()
  .meow()

Có vẻ đã vi phạm nguyên tắc DRY(Don't repeat yourself) trong thiết kế chương trình, xử đẹp nó bằng cách thêm lớp Animal rồi ném function đấy vào là mọi chuyện đã được giải quyết             </div>
            
            <div class=

0