È una pratica accettabile inizializzare risorse fisiche / esterne da un costruttore quando la risorsa è necessaria perché l'oggetto faccia il suo lavoro?
Ad esempio, supponiamo di voler creare un oggetto che trasmetta una coda di messaggi durevole e che la coda di messaggi sia una tabella fisica del database.
Avrebbe senso creare un costruttore idempotente che crea fisicamente la tabella se non esiste ancora?
es.
IMessageQueue queue = new SQLTableMessageQueue('table_name', dataSource);
Forse un metodo statico di fabbrica sarebbe più appropriato? In tal caso, la creazione della tabella si verificherebbe nel metodo factory e il costruttore sarebbe libero da tale comportamento.
IMessageQueue queue = SQLTableMessageQueue.create('table_name', dataSource);
Non sono sicuro di quale sarebbe l'approccio appropriato? Un'altra idea che ho avuto è stata quella di utilizzare il schema del repository .