El autor de este artículo usa singletons para la capa de servicio en este ejemplo de API de nodo:
https://html5hive.org/how-to-create-rest-api-with-node-js-and-express/
Afirma: "Solo queremos que haya una instancia de nuestro servicio de jugador, por lo que en lugar de exportar la clase en sí, exportaremos una nueva instancia de la misma. Los archivos de módulo en el nodo solo se ejecutan una vez, por lo que esto proporciona efectivamente nosotros un singleton".
'use strict'; var uuid = require('node-uuid'); class PlayersService { constructor() { this.players = []; } getPlayers() { return this.players; } getSinglePlayer(playerId) { var player = this.players.filter(p => p.id === playerId)[0]; return player || null; } addPlayer(info) { // prevent a bit of bad/duplicate data if (!info || this.players.filter(p => (p.firstName === info.firstName && p.lastName === info.lastName)).length > 0) { return false; } info.id = uuid.v4(); this.players.push(info); return true; } updatePlayer(playerId, info) { var player = this.getSinglePlayer(playerId); if (player) { player.firstName = info.firstName ? info.firstName : player.firstName; player.lastName = info.lastName ? info.lastName : player.lastName; player.displayName = info.displayName ? info.displayName : player.displayName; return true; } return false; } } module.exports = new PlayersService();Lo cual parece razonable ya que la función de estos servicios es proporcionar la misma implementación para los controladores que los usan.
Sin embargo, en esta publicación:
Sobre patrones de diseño: ¿cuándo usar el Singleton?
el cartel solicita un caso de uso legítimo para singletons que no sea una clase Logger. Varias personas respondieron a su pregunta diciendo que nunca se deben usar singletons.
Pero, ¿no es el uso de singletons para servicios como el que he copiado aquí un caso de uso legítimo y una mejor práctica para no crear múltiples instancias que proporcionen la misma implementación? Gracias.