risposta

5

In sostanza, la tua ipotesi è corretta. I modelli di repository e DAO esternalizzano i problemi di persistenza mentre Active Record li interiorizza. In realtà ho visto alcune implementazioni in cui sono state inserite classi di record attive con un'istanza di repository che ha fornito internamente i loro problemi di persistenza.

Il motivo principale per cui non si utilizza il pattern Active Record è semplice, gli oggetti dominio non dovrebbero preoccuparsi di come (o anche se) sono persistenti. Il modello di repository fornisce l'ignoranza della persistenza agli oggetti del dominio esternalizzando i problemi di persistenza e fornendoli come servizio esterno.

2

IMO, Il modello di repository consente di ridurre il numero di query eseguite sul database perché ti allena a pensare in termini di transazioni e di batch di comandi, mentre con il pattern Active Record è facile chiamarsi. save(), .fetch(), ecc. con abbandono spericolato. I database possono essere un collo di bottiglia abbastanza grande in generale, non peggiorare le cose con query non necessarie.