Tôi đã nghiên cứu để đưa ra một phong cách mã hóa Javascript chuẩn hóa cho nhóm của mình. Hầu hết các tài nguyên hiện đều đề xuất mẫu "Mô-đun" có liên quan đến việc đóng cửa, chẳng hạn như:Lợi ích của Mô-đun Mô-đun Javascript là gì?
var Module = function() {
someMethod = function() { /* ... */ };
return {
someMethod: someMethod
};
}();
và gọi nó như Module.someMethod();
. Cách tiếp cận này dường như chỉ hoạt động với các phương thức tĩnh trong ngữ cảnh OOP truyền thống, ví dụ các lớp lưu trữ để tìm nạp/lưu dữ liệu, các lớp dịch vụ để thực hiện các yêu cầu bên ngoài và tương tự. Trừ khi tôi bỏ lỡ một cái gì đó, mô hình mô-đun không có ý định được sử dụng với các lớp dữ liệu (nghĩ DTO) mà thường sẽ cần phải được chuyển đến/từ các phương thức dịch vụ đến mã keo UI.
Một lợi ích chung tôi thấy trích dẫn là bạn có thể có phương pháp tin đúng và các lĩnh vực trong Javascript với kiểu mô-đun, nhưng điều này cũng có thể đạt được cùng với việc có thể có tĩnh hay phương pháp dụ với " kiểu "kiểu Javascript cổ điển" tương tự như thế này:
myClass = function(param) {
// this is completely public
this.publicProperty = 'Foo';
// this is completely private
var privateProp = param;
// this function can access the private fields
// AND can be called publicly; best of both?
this.someMethod = function() {
return privateProp;
};
// this function is private. FOR INTERNAL USE ONLY
function privateMethod() {
/* ... */
};
}
// this method is static and doesn't require an instance
myClass.staticMethod = function() { /* ... */ };
// this method requires an instance and is the "public API"
myClass.prototype.instanceMethod = function() { /* ... */ };
Vì vậy, tôi đoán câu hỏi của tôi là điều làm cho Mô hình mô-đun tốt hơn kiểu truyền thống? Đó là một chút sạch hơn, nhưng đó dường như là lợi ích duy nhất mà là rõ ràng ngay lập tức; trên thực tế, phong cách truyền thống dường như cung cấp khả năng cung cấp đóng gói thực sự (tương tự như các ngôn ngữ OOP thực như Java hoặc C#) thay vì chỉ đơn giản trả về một tập hợp các phương thức tĩnh.
Có điều gì tôi thiếu không?
Mô-đun mô-đun có thể được sử dụng để tạo mẫu thử cũng như: 'var Module = function() { function Module() {}; Module.prototype.whatever = function() {}; return Module }(); ' –
Nếu bạn định nghĩa một singleton, nó không quan trọng cho dù bạn sử dụng phương pháp tĩnh hay dụ. Trong thực tế, tôi sẽ thích phiên bản tĩnh kể từ đó tôi không phải lo lắng về việc rối tung lên "điều này" khi sử dụng các chức năng của các chức năng trong một cuộc gọi lại. – hugomg