2014-05-02 10 views
5

RAII (Acquisizione risorse è inizializzazione) è uno dei metodi suggeriti per la costruzione di oggetti. In che modo si riferisce ai principi di test unitario che stanno dicendo: nessun lavoro complesso svolto nel costruttore? E soprattutto nessuna creazione esplicita di oggetti da parte di un "nuovo" operatore? Tuttavia, la creazione di alcuni oggetti richiede talvolta passaggi più complessi e passare una factory a un costruttore rende l'API "sporca" nel senso di diminuire la leggibilità. Quali sono i modi generali per soddisfare entrambi i principi allo stesso tempo?RAII e principi di collaudo unità

Ho trovato l'altro argomento su SO: Stack allocated RAII objects vs DI principle, tuttavia sembra un problema più generale e non è spiegato bene.

+0

@MartinJames perché? Mi sembra una domanda legittima di progettazione del software. Inoltre, non posso pensare a nessuna classe che lo chieda come compito. –

+0

Se questa è una domanda di assegnazione, allora voglio studiare lì! Tuttavia è un problema che incontro nel lavoro di tutti i giorni. Mi piacerebbe incontrare le opinioni e il modo in cui gli altri sviluppatori gestiscono. – thatsme

risposta

3

Sì, la creazione di una classe concreta in un costruttore complica la classe che lo fa, aggiunge una dipendenza alla classe e rende più difficile il test.

Ma RAII non è un modo di costruire oggetti, ma di liberare risorse. La classe il cui distruttore rilascia la risorsa non deve costruire l'oggetto, sebbene di solito lo faccia: vedi What is meant by Resource Acquisition is Initialization (RAII)?.

Quindi, creare la risorsa al di fuori della classe che lo utilizza, se lo si desidera, utilizzare una factory per farlo se si desidera, ecc., Ma poi lasciare che la classe che utilizza la risorsa lo pulisca con RAII.

+0

In realtà in un dato momento mi sono pentito di aver posto questa domanda poiché l'esempio perfetto di tale comportamento è shared_ptr. – thatsme