Я немного запутался в логике шаблона DataMapper.
Что у меня есть (псевдокод, здесь не нужно искать ответы для конкретных языков):
class Car implements DomainObjectAbstract {
... properties ...
... accessors / mutators ...
... behaviors ... // drive, park, whatever.
}
class House implements DomainObjectAbstract {
... properties ...
... accessors / mutators ...
// may not have behaviors, a house doesn't 'do anything, it just is'
}
class DaoCar implements DaoAbstract {
// some code to handle reading and writing car object to database table
}
class DaoHouse implements DaoAbstract {
// some code to handle reading and/or writing house object to an xml file
}
class DataMapper {
protected _dao;
protected _model;
function getDao() return this->_dao;
function setDao( DomainObjectAbstract dao) this->_dao = dao;
function getModel() return this->_model;
function setModel( DaoAbstract model ) this->_model = model;
function create() { // create a new instance of the model }
function save() { // create or update the model into persistent storage }
function fetch( id ) { // fetch record from storage and return a property populated model }
... etc ...
}
Вопрос: Какова цель нескольких DataMappers?
Я имею в виду, зачем мне HouseDataMapper и CarDataMapper, учитывая, что DataMapper не должен заботиться ни о модели, ни о дао, за исключением того, что он следует правилам реализации. Моя единственная мысль - это разные DataMappers для разных абстрактных (правил) для разных моделей и объектов доступа к данным. Я спрашиваю, потому что большинство примеров, которые я вижу, говорят о том, что HouseDataMapper и CarDataMapper являются отдельными сущностями, разве это не нарушит цель DataMapper PoEEA?