Vorrebbe iniziare dicendo: lo sto chiedendo come un esercizio puramente accademico; Sono abbastanza contento di continuare a utilizzare il pattern del repository .
Ho sentito dire "Ho inserito i metodi di persistenza nei miei oggetti di business perché quando persistere era parte integrante della logica aziendale", che non credo sia un motivo valido, perché ciò significa solo che il tuo oggetto business ha bisogno di un TimeToSave evento
Ma si potrebbe obiettare, se si utilizza il modello di strategia per i metodi di persistenza, tecnicamente non si include la logica di persistenza nel proprio livello di dominio. Vedi esempio sotto:
class MyEntity
{
private ISaveMyEntity _saver;
public MyEntity(ISaveMyEntity saver) { _saver = saver; }
public void Save()
{
_saver.Save(this);
}
//Real business methods
}
Includere con un oggetto business, i suoi metodi di persistenza, potrebbe rivelarsi conveniente. Inoltre, il pattern del repository è spesso abusato e finisce per contenere tutta la logica aziendale invece del solo CRUD, mentre l'oggetto business si trasforma in DTO; a mio parere, questo è peggio di un oggetto business contenente i metodi CRUD.
Quali potrebbero essere le potenziali insidie di includere l'accesso alla persistenza in un oggetto aziendale tramite il modello strategico? L'uso del modello strategico potrebbe attenuare alcuni dei problemi comunemente associati al codice di archiviazione in un oggetto aziendale?