le funzionalità di una gemma che sto creando dipendono da una lista di
parametri di configurazione specificabili a run-time o tramite yaml
(yaml è
una mia convenzione, non un requirement).
Il primo candidato che mi è venuto in mente per gestire gli aspetti
della
configurazione è una classe Singleton:
lib/mymodule/configuration.rb
require ‘singleton’
class Configuration
include Singleton
instance-level helpers here
end
Ma mi sono subito scontrato con la scomodità nel testare un Singleton.
Dopo qualche smanettamento sono giunto all’introduzione di una classe
Singleton-like resettabile (ConfigurationProvider) per la gestione del
ciclo di vita dell’oggetto realmente responsabile dei parametri di
configurazione (Configuration).
In questo modo, prima di usare le funzionalità della gemma il consumer
deve
effettuare un:
Ma mi sono subito scontrato con la scomodità nel testare un Singleton.
che difficolta’ hai trovato?
Nel resettare lo stato prima di ogni test.
Oddio, potrei impostare lo stub del path del file di configurazione
specificando un mio yaml di test ma in questo modo sarei costretto a far
condividere a tutti i test la stessa configurazione.
On Nov 21, 2013 5:58 PM, “maurizio de magnis” [email protected]
wrote:
Nel resettare lo stato prima di ogni test.
Oddio, potrei impostare lo stub del path del file di configurazione
specificando un mio yaml di test ma in questo modo sarei costretto a far
condividere a tutti i test la stessa configurazione.
OK. Got it. La soluzione del mattr_accesible come ti pareva?
le funzionalit di una gemma che sto creando dipendono da una lista di
parametri di configurazione specificabili a run-time o tramite yaml (yaml
una mia convenzione, non un requirement).
Ciao Maurizio, non so su cosa tu stia lavorando ma se la tua libreria
prevede una sola istanza (e quindi una sola configurazione) c’e` forse
a monte un errore di design della tua API.
Piccolo follow-up della chat avvenuta con il buon Stefano
Ha effettivamente ragione: ha senso abbandonare il pattern Singleton in
favore del miglior compromesso tra i pattern Template e Factory.
More on this later