Nodejs có áp dụng OOP vào đươc không? Và có thật sự cần thiết?

Nodejs có áp dụng OOP vào đươc không nhỉ? à thì theo suy nghĩ của mình thì có thể, cơ mà có thật sự cần làm thế không? Tại mình chưa thấy project nào trên github sử dụng OOP với Nodejs cả.
Ngay cả khi có typescript thì vẫn thấy việc áp dụng oop trong các dự án Nodejs khá là hiếm.

"Cá nhân tôi nói rằng việc viết Node.js trong phong cách OOP sẽ chỉ làm chậm bạn. Ngoài ra, cố gắng để đạt được OOP tinh khiết trong Node.js (hoặc JS nói chung) sẽ yêu cầu thêm boilerplate để cung cấp các tính năng như đa hình. (Ngoài ra, việc Chuyển đổi kiểu dữ liệu không phải là một thứ hay trong JS, thay vào đó chúng ta có mutable scope).

Tôi cũng nói rằng bạn không cần thừa kế. Ví dụ, bạn có thể chọn viết theo phong cách chức năng và dựa vào sáng tác.

Hầu hết các dự án trong thế giới thực mà tôi đã thấy, sử dụng Node.JS được viết trong một sự kết hợp các kiểu hàm, OO và thủ tục.

Tôi bắt đầu làm việc với Node.JS khi đã có nền tảng OO và cố gắng áp dụng chúng(OO) một phong cách nghiêm ngặt cho code của tôi đang viết, nhưng nhanh chóng nhận thấy rằng tôi đã bỏ qua các tính năng mà Javascript nói chung đang cung cấp.

Một sự khác biệt lớn giữa JS và rất nhiều ngôn ngữ OO truyền thống, là các hàm đó là các first-class objects, có nghĩa là bạn có thể tạo chúng bên ngoài các lớp. Bạn sẽ nhận ra rằng một class sẽ chỉ thêm chi phí và sự phức tạp lên trên chức năng của bạn.

Với Node.JS, bạn sử dụng modules để chia nhỏ mã của mình. Các modules có thể là các trình đơn đơn giản, các thư viện hàm, các lớp hoặc thậm chí chỉ cung cấp một giá trị đã được tính toán.

=> tôi sẽ nói cách “đúng” để viết Node.js là viết từng mô-đun theo cách đơn giản nhất có thể, và xây dựng lại mã sử dụng theo bất kỳ kiểu nào có ý nghĩa đối với đoạn logic cụ thể đó. Nếu bạn dùng quá nhiều OO ngay từ đầu => bạn đang làm phức tạp mọi thứ"

Không dùng OOP thì việc xây dựng, bảo trì hệ thống sẽ mất nhiều chi phí hơn. OOP ra đời nhằm giúp công sức viết code được tiết kiệm hơn, code sạch hơn, tổ chức cũng tốt hơn.

1 Like

Đấy là ý kiến cá nhân người ta (vì môi trường làm việc của họ, yêu cầu hệ thống của họ không thể áp dụng được oop).
Khi bạn code, hãy dùng cái đầu của bạn để mà nghĩ.

5 Likes

JavaScript có áp dụng vào OOP được không?

  • Được, bạn có thể tạo fake class dựa trên new FunctionName() và tận dụng cơ chế Prototype Chain, hoặc có thể sử dụng từ khoá class được cung cấp ở ES6 để ẩn tất cả hoạt động tạo fake class.

NodeJS áp dụng OOP không?

  • Không, NodeJS sử dụng CommonJS để hiện thực Module Pattern, có tác dụng tương tự như class trong traditional OOP.

JavaScript có OOP không?

  • Không, JS sử dụng Module Pattern, ES6 Module, IIFE để phân chia logic chương trình độc lập với nhau.

JavaScript có thừa kế?

  • Không, JS không có cơ chế copy từ object của superclass sang subclass như trong traditional OOP language, nhưng có thể giả “thừa kế” bằng cách link giữa object từ subclass tới superclass qua [[Prototype]]. Cách link giữa 2 object làm 2 object của subclass cùng trỏ tới 1 object của superclass, điều này trái với quy tắc của traditional OOP.

this trong JavaScript là reference tới object của class?

  • Không, this là một biến thông thường, nhưng được truyền theo dynamic binding thay vì lexical scope binding.

Có nên sử dụng OOP trong project viết bằng JavaScript

  • Tuỳ
    • bạn có thể tận dụng các từ khoá class, extends, super và các kĩ thuật khác trong ES6 để mô phỏng theo OOP, các trường hợp lỗi do hiện thực bên trong chủ yếu là những trường hợp hiếm gặp.
    • nếu bạn muốn tìm hiểu sâu, thì có thể tận dụng module pattern, block scope, function scope để phân chia chương trình thành các thành phần độc lập với nhau.

Câu hỏi cuối, có nên học JavaScript để học OOP?

  • KHÔNG, đơn giản. :joy:
17 Likes

thì mình thắc mắc mn đang làm như nào nên hỏi tham khảo thôi bạn, sao nặng lời thế :roll_eyes:

Bạn đừng hiểu nhầm, mình trả lời không đặt cảm xúc vào không hẳn là nặng lời. Bạn nên tự tin lên.

4 Likes

A post was split to a new topic: Chọn sách hoặc tài liệu nào để học JavaScript và NodeJS?

merged and moved by noname00

1 Like

JS vẫn có OOP :smiley: có điều nó theo hướng khác và vì vậy class chỉ là giả lập.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?