Siempre he trabajado con varios ORM y colocé toda mi lógica dentro de mis modelos independientemente de su naturaleza: SQL, consultas de MongoDB & incluso la obtención de objetos JSON remotos. Pero cuando es necesario garantizar acoplamientos sueltos para permitir un alto nivel de capacidad de prueba, los problemas de esta metodología aparecen rápidamente.¿Entender el objeto Dominio + el patrón del mapeador de datos?
Hoy he leído sobre la separación de modelos en dos partes, Domain objects
& Data mappers
.
Si lo entendí completamente, Domain objects
son completamente inconscientes del almacenamiento utilizado, y en cambio existe para manejar la lógica de negocios. Data mappers
por otro lado se encarga de almacenar el conjunto de datos en el Domain objects
a un conjunto de almacenamiento de datos.
Sin embargo, me resulta un poco difícil encontrar un buen ejemplo fácil de entender en línea sobre cómo trabajar con los DomainObjects & DataMappers en un ejemplo del mundo real.
¿Sería esto (el código que se muestra a continuación) la forma adecuada de trabajar con DomainObjects & DataMappers en mi código para almacenar Usuarios o lo he entendido mal en mi cabeza?
$user = new User_DO;
$userSave = new User_DM;
$userSave->store($user->add(array('name' => 'John Doe')));
class User_DO {
function add($array) {
if(!isset($array['name'])) {
throw new Exception("Name must be set");
}
return $array;
}
}
class User_DM {
function store($array) {
MyDatabase::execute("INSERT INTO...");
}
}
un ejemplo quizás estúpido en el mundo real, pero que puede explicar mejor el patrón, sería un objeto de dominio con un campo "edad", mientras que el mapeador de datos persistirá el valor de "año de nacimiento". –