Domanda

Hai eseguito il refactoring da un ActiveRecord in un modello DataMapper ? Quali condizioni hanno richiesto il passaggio? Sono principalmente interessato alle applicazioni basate sul Web, ma vorrei conoscere le sfide che accompagnano una simile mossa in qualsiasi ambiente.

È stato utile?

Soluzione

Mi piace molto il modello ActiveRecord per la sua semplicità. Tuttavia, mi sono allontanato da esso per le app Web più grandi. Trovo che man mano che un progetto basato su ActiveRecord diventa più complesso, gli oggetti ActiveRecord diventano grandi e carichi di troppo codice.

Introducendo un modello di repository (essenzialmente un Data Mapper) le classi del modello di dominio diventano più semplici e la logica di mappatura / accesso ai dati viene mantenuta separata.

Inoltre, è abbastanza difficile (impossibile?) deridere oggetti ActiveRecord a causa del loro utente con metodi statici.

Altri suggerimenti

Uso un framework che fornisce Table Data Gateway e Row Data Gateway come classi integrate facili da usare perché tutto ciò che devo specificare è la chiave primaria (se non solo "id") e il nome della tabella (se non uguale al nome della classe). Tuttavia, recentemente ho scoperto nel processo di refactoring che questi schemi iniziano a degradare nel momento in cui deve avvenire una mappatura più complessa tra il dominio e il database.

Ad esempio, al momento sto eseguendo il refactoring del codice per un sito Web in modo da utilizzare Mapper dati in modo da poter utilizzare Ereditarietà tabella singola (utilizza Mappatura ereditarietà). Fondamentalmente, ogni volta che la relazione tra database e dominio diventa più complessa di uno a uno, prenderei seriamente in considerazione l'uso di Mapper dati.

Ho scritto un sistema di build integrato in cima a PDE-Build usando camping . Inizialmente ho usato ActiveRecord, ma avevo bisogno di un accesso thread-safe senza blocco al database, quindi sono passato all'utilizzo di Data Mapper.

Ho avuto la mia giusta dose di dolore dai bug, ma le ultime versioni sembrano piuttosto stabili.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top