Ho un'applicazione web Node.js scritta in CoffeeScript, che ha una serie di "servizi". Questi vari servizi sono attualmente esposti come un CoffeeScript class
, che fa alcune cose che mi piacciono.
Per uno, ottengo un metodo che viene eseguito una volta all'avvio dell'istanza del servizio. Su alcuni servizi questo mi consente di recuperare i token di autenticazione, creare connessioni, ecc. Che sono requisiti per tali servizi. L'uso delle classi CS mi consente anche di avere proprietà che possono essere referenziate nei metodi specifici esposti all'istanza della classe (stato, metodi di supporto, ecc.)
Inizialmente, quando ho rilevato i servizi dell'applicazione, sono stati esposti in questo modo:
class SchedulerService
constructor: (@msgBus, connStr) ->
# Some logic setting up service.
somePublicMethod: (cb) ->
cb()
module.exports = SchedulerService
Più di recente, ho preso l'abitudine di non esporre la classe stessa, ma un'istanza della classe.
# Some code that grabs msgBus connection, dbConnStr
class SchedulerService
constructor: (@msgBus, connStr) ->
# Some logic setting up service.
somePublicMethod: (cb) ->
cb()
module.exports = new SchedulerService(msgBus, dbConnStr)
Se si guardano i documenti questi moduli verranno memorizzati nella cache, consentendo di richiedere questi servizi e di avere l'inizializzazione viene eseguita una volta per servizio.
Ci sono degli svantaggi in questo tipo di modello di modulo? Una cosa di cui dovrei preoccuparmi è di invalidare la cache dei moduli, ma sembra che ciò non avvenga in circostanze normali.
Un'altra preoccupazione è il codice boilerplate per afferrare questi valori comuni, ma ritengo che sia risolvibile da un modulo il cui unico compito è fornire questo tipo di argomenti.
Qualche altra cosa che mi manca qui? Sembra un modello di servizio valido con CoffeeScript.