thảo luận composition vs inheritance - tương lai của OOP

Hiện tại mình thấy khái niệm kế thừa hay oop đang ngày càng ít đi ở nhiều framework lẫn ngôn ngữ mới (golang, rust) như:

vậy thắc mắc của mình là:
1. Best practice trong tương lai khi re-use code thì ntn?
2. Tại sao kế thừa không dc chuộng nữa?
3. Mình thấy kế thừa vẫn nên có ở tầng DAO hay ORM vì giao tiếp với DB mà khái nhiệm kế thừa ở DB khá nhiều kiểu như người, giáo viên, công nhân ...
 
Last edited:
Hiện tại mình thấy khái niệm kế thừa hay oop đang ngày càng ít đi ở nhiều framework lẫn ngôn ngữ mới (golang, rust) như:

vậy thắc mắc của mình là:
1. Best practice trong tương lai khi re-use code thì ntn?
2. Tại sao kế thừa không dc chuộng nữa?
3. Mình thấy kế thừa vẫn nên có ở tầng DAO hay ORM vì giao tiếp với DB mà khái nhiệm kế thừa ở DB khá nhiều kiểu như người, giáo viên, công nhân ...

theo mình nghĩ thì
1/ cứ theo KISS, DRY là được, dù code FP hay OOP đều ko nên để lặp code.
2/ kế thừa làm khá tốt trong việc thiết kế đa hình, nhưng làm thì rất dễ làm kế thừa sai.
3/ Đúng, mình cũng làm nhiều project có kế thừa ở DB, hậu quả là muốn extend thêm thì phải tốn nhiều thời gian hơn để ko bị conflict, break code.
 
Hiện tại mình thấy khái niệm kế thừa hay oop đang ngày càng ít đi ở nhiều framework lẫn ngôn ngữ mới (golang, rust) như:

vậy thắc mắc của mình là:
1. Best practice trong tương lai khi re-use code thì ntn?
2. Tại sao kế thừa không dc chuộng nữa?
3. Mình thấy kế thừa vẫn nên có ở tầng DAO hay ORM vì giao tiếp với DB mà khái nhiệm kế thừa ở DB khá nhiều kiểu như người, giáo viên, công nhân ...
1. Câu chuyện ở đây là sẽ không có một giải pháp cho tất cả. Best-practice theo mình là bạn phải thử áp dụng càng nhiều khái niệm càng tốt r sẽ biết được khi nào thì nên dùng cái gì.
2. Không hẳn là inheritance không được chuộng nữa, mà đúng ra là trước giờ nó đang bị lạm dụng, trong nhiều case composition hợp lý nhưng vẫn sử dụng inheritance, kiểu kiểu vậy.
 
Hiện tại mình thấy khái niệm kế thừa hay oop đang ngày càng ít đi ở nhiều framework lẫn ngôn ngữ mới (golang, rust) như:

vậy thắc mắc của mình là:
1. Best practice trong tương lai khi re-use code thì ntn?
2. Tại sao kế thừa không dc chuộng nữa?
3. Mình thấy kế thừa vẫn nên có ở tầng DAO hay ORM vì giao tiếp với DB mà khái nhiệm kế thừa ở DB khá nhiều kiểu như người, giáo viên, công nhân ...

Composition and inheritance pros and cons​

Inheritance
  • Pros: Reusable code, easy to understand
  • Cons: Tightly coupled, can be abused, fragile
Composition
  • Pros: Reusable code, flexibility, loosely coupled
  • Cons: Harder to understand
We don’t mean that inheritance is a bad thing, it’s great and we will still need and use inheritance. Composition is just an alternative that we need to consider.
 
nhưng các bác có ví dụ trường hợp nào thì nên Composition và cụ thể dùng Composition ntn.
Mình ví dụ 1 cái trước nhá: như Reactjs thì đúng là giữa component vs nhau mà dùng kế thừa để re-use code là sai vì kiểu của nó ko phải là 'has a' trong quan hệ kế thừa nên ng ta mới chuyển qua dùng HOC component hay nested component để re-use nó và ng ta cũng dẹp lun cái trò mixin lun.
 
Hiện tại mình thấy khái niệm kế thừa hay oop đang ngày càng ít đi ở nhiều framework lẫn ngôn ngữ mới (golang, rust) như:

vậy thắc mắc của mình là:
1. Best practice trong tương lai khi re-use code thì ntn?
2. Tại sao kế thừa không dc chuộng nữa?
3. Mình thấy kế thừa vẫn nên có ở tầng DAO hay ORM vì giao tiếp với DB mà khái nhiệm kế thừa ở DB khá nhiều kiểu như người, giáo viên, công nhân ...
Tôi thấy code FP có ưu điểm là dễ mở rộng, viết nhanh. Tuy nhiên team phải trao đổi thường xuyên để tránh lặp code và hiểu đc flow.

P/s người ta nói OOP dễ hiểu nhưng cá nhân tôi thấy rối rắm vãi, nào là khai báo lớp, rồi phải làm prototype cho lớp đó, rồi 1 đống thằng class con xài chung prototype xong tới lúc mở sửa cái prototype đó y như là sửa 1 bug mà đẻ ra cả đống bug vậy.
 
inheritance với hành vi chứ nhỉ sao lại là composition anh nói nhầm à
ghXpJrI.png
mà cái đó là đa hình chứ, kế thừa chỉ là cách thực hiện đa hình thoy
zQU2cJa.png
cái gì ko cần đa hình thì đừng xài kế thừa.
 
Tôi thấy code FP có ưu điểm là dễ mở rộng, viết nhanh. Tuy nhiên team phải trao đổi thường xuyên để tránh lặp code và hiểu đc flow.

P/s người ta nói OOP dễ hiểu nhưng cá nhân tôi thấy rối rắm vãi, nào là khai báo lớp, rồi phải làm prototype cho lớp đó, rồi 1 đống thằng class con xài chung prototype xong tới lúc mở sửa cái prototype đó y như là sửa 1 bug mà đẻ ra cả đống bug vậy.
Vậy mới nói pro thì phải lường trước được và tạo tỉ lệ bug thấp nhất. Tối ưu hoá code .
 
Back
Top