2012-07-31 30 views
5

PRE: Tôi đã đọc NodeJS modules vs classes nhưng điều này cụ thể hơn.nodejs: Mô-đun nút so với các lớp singleton

Là một phần của một số phép tái cấu trúc trong Node, tôi có một vài Dịch vụ ứng dụng (trong thuật ngữ DDD) được triển khai kỹ thuật dưới dạng mô-đun Nút.

Vì (trong thế giới DDD, có thể là bất kỳ vấn đề nào khác) Dịch vụ ứng dụng phải là đơn và vì mô-đun Node được đảm bảo là 1 'thể hiện', có vẻ như tôi không phù hợp (Có bất kỳ lý do nào để tôi xem xét việc tái cấu trúc các dịch vụ ứng dụng này như là các lớp singleton thích hợp (như 'singletonness' có thể được bảo đảm trong javascript anyway), ngoài quan điểm thuần túy không? Không.

Trả lời

6

Khám phá Node's module caching caveats đối với các trường hợp 'mô-đun đơn lẻ' của mô-đun sẽ bị hỏng.

Nếu bạn luôn tham chiếu mô-đun đơn lẻ của mình với đường dẫn tệp (bắt đầu bằng ./, ../ hoặc /) trong một gói duy nhất bạn an toàn.

Nếu dịch vụ của bạn được gói trong một gói để sử dụng bởi các mô-đun khác, bạn có thể kết thúc với nhiều phiên bản đơn của bạn.

Giả sử chúng tôi công bố thư viện này phục vụ ngọt ngào:

service-lib/ 
⌞ package.json 
⌞ service.js 

service.js: 
    var singleton = {}; 
    module.exports = singleton; 

Trong ứng dụng này, server.jsother.js sẽ nhận được trường hợp khác nhau của dịch vụ của chúng tôi:

app/ 
⌞ server.js 
⌞ node_modules/ 
    ⌞ service-lib/ 
    ⌞ service.js 
    ⌞ other-package/ 
    ⌞ other.js 
    ⌞ node_modules/ 
     ⌞ service-lib/ 
     ⌞ service.js 

Trong khi ứng dụng này sẽ phần một ví dụ:

app/ 
⌞ server.js 
⌞ node_modules/ 
    ⌞ service-lib/ 
     ⌞ service.js 
    ⌞ other-package/ 
     ⌞ other.js 

Cùng một npm install nhập cùng một app có thể dẫn đến cấu trúc thư mục tùy thuộc vào phiên bản của phụ thuộc. Node's folders doc có các chi tiết.

Các vấn đề liên quan