PoEEA-логика DataMapper / Domain Driven Design - PullRequest
1 голос
/ 16 сентября 2011

Я немного запутался в логике шаблона 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?

1 Ответ

1 голос
/ 16 сентября 2011

При дальнейшем чтении я вижу свою ошибку:

"Data Mapper - это уровень программного обеспечения, который отделяет объекты в памяти от базы данных. Его ответственность заключается в передаче данных между ними, а также визолировать их друг от друга ".- Мартин Фаулер, P из EAA (Data Mapper)

Так что, где бы я ни путался, Data Mapper (конкретный) должен знать об объектах в памяти (объектах созданных моделей)просто изолирует их от базы данных (объекта доступа к данным).

...