Home > Sviluppo Software > Patterns in ruby: Singleton

Patterns in ruby: Singleton

August 27th, 2010 Leave a comment Go to comments

Uno dei pattern piu controversi e discussi (es: leggi qui, qui e qui) è il singleton. Il singleton pattern viene utilizzato quando l’oggetto ha una sola ed unica istanza. Ad esempio alcuni software hanno un’unico file di configurazione o un solo accesso al database. L’implementazione del pattern in ruby è la seguente:

L’unico oggetto della classe Logger sarà quindi disponibile ovunque semplicemente richiamando il metodo di classe Logger.instance. Si tratta forse del più semplice dei pattern ed apparentemente molto comodo, tuttavia i rischi sono insidiosi, ed è elevatissimo il rischio di abusarne. Innanzitutto bisogna effettivamente chiedersi se l’oggetto che si vuole rappresentare è realmente unico, molto spesso ci si accorge che non è cosi, per esempio ci si può ritrovare ad avere due distinti accessi al database e cosi via. Si rischia anche di confondere la necessità di avere una sola istanza di un determinato oggetto con la comodità di potervi accedere ovunque, come fosse una variabile globale.

Tests

Un’altro dei problemi fondamentali del singleton è strettamente legato ai test. Il prerequisito base dei test è che questi inizino tutti con uno stato noto ed è fondamentale che ogni test unit sia indipendente dalle altre. E’ ovvio che il singleton interferisce e porta i test ad uno stato imprevedibile. Una delle soluzioni a questo problema è quella di separare il codice dal singleton realizzando due classi distinte ed usando il singleton in produzione e la classe non-singleton durante i test:

  1. No comments yet.
  1. No trackbacks yet.