2 cents: comecem engatinhando...

Faz essa transformação ali no metodo/classe que vc precisa usar, caso precise reutilizar a mesma lógica em outros lugares, ai começa a abstrair.

A questão aqui não é apenas transformação de dados, mas desacoplamento das camandas de dóminio e persistência.

Voce pode realizar essa transformacoes na classe especifica e manter o desacoplamento entre seu dominio e infra. Faz o mapeamento para/de dominio dentro do repositorio por exemplo. Mesma coisa com um controller da vida. A abstração do data mapper em si não é necessaria a primeiro momento na maioria dos casos.
Consegue enviar um trecho de código de exemplo?
``` class FooRepository { public function find(int $id): Foo { $row = yourDbQueryThatReturnGenericRow(); // map to domain model here $foo = new Foo( $row->id, $row->something, $row->anotherSomething ); return $foo; } } ``` Não precisa abstrair essa lógica em uma nova classe sem motivos, se só vai usar ela ai, usa ela ai