Что теперь осталось от Data Mapper

Итак, мы забрали из Data Mapper создание объектов, запросов и коллекций, не говоря уже об управлении условиями. Что же от него осталось? То, что нужно от Data Mapper в рудиментарной форме. Нам по-прежнему нужен объект, который находится над другими созданными объектами и координирует их действия. Это поможет выполнять задачи кеширования и управлять связностью базы данных (хотя работа с базой данных может быть делегирована еще выше). Клифтон Нок называет эти контроллеры уровня данных сборщиками доменных объектов. Приведем пример.

class woo_mapper_DomainObjееtAssemblег {

protected static $PDO;

private $statements=array();

function _construct( woo_mapper_PersistenceFactory $factory ) {

$this->factory = Sfactory; if ( ! isset(self : :$PDO) ) {

$dsn = woo_base_ApplicationRegistry: :getDSN( );

if ( is_null( $dsn ) ) {

throw new woo base_AppException( «DSN не определен» );

}

self : :$PDO = new PDO( $dsn );

self::$PDO->setAttribute(PDO::ATTR_ERRMODE, PDO: :ERRMODE EXCEPTION) ;

function getStatement( $str ) {

if ( ! isset( $this->statements[$str] ) ) {

$this->statements [$str] = self.-: $PDO-»prepare ( $str );

}

return $this->statements[$str];

}

function findOne( woo_mapper_IdentityObject $idobj ) {

$collection = $this->find( $idobj );

return $collection-»next();

}

function find( woo_mapper_IdentityObject $idobj ) {

$selfact = $this->factory->getSelectionFactory( );

list ( $selection, $values ) = $selfact->newSelection( $idobj );

$stmt = $this->getStatement( $selection );

$stmt-»execute( $values );

$raw = $stmt->fetchAll();

return $this-»factory->getCollection( $raw );

}

function insert( woo_domain_DomainObject $obj ) {

$upfact = $this-»factory->getUpdateFactory( );

list( $update, $values ) = $upfact-»newUpdate( $obj );

$stmt = $this-»getStatement( $update );

$stmt-»execute( $values );

if ( $obj–»getId () < 0 ) {

$obj-»setId( self::$PDO-»lastInsertId() );

}

$obj-»markClean();

Как видите, это не абстрактный класс. Вместо того чтобы самостоятельно разбивать себя на специализации, он использует PersistenceFactory, чтобы гарантировать, что он получит правильные компоненты для текущего объекта приложения.

На рис.  показаны участники высокого уровня, которые мы создали, когда забирали функции у Mapper.

Scr02 Что теперь осталось от Data MapperПомимо осуществления связи с базой данных и выполнения запросов, этот класс управляет объектами SelectionFactory и UpdateFactory. В случае Selec-tionFactory, он также работает либо с классом Collection, Либо непосредственно с DomainOb j ectFactory, чтобы сгенерировать возвращаемые значения.

С точки зрения клиента, получить DomainObjectFactory легко. Это просто вопрос получения нужного конкретного объекта PersistenceFactory.

$factory = woo_mapper_PersistenceFactory::getFactory( ‘woo_domain_Venue’ );

$finder = new woo_mapper_DomainObjectAssembleir( $factory );

Хотя, конечно, было бы еще проще добавить метод getFinderO к самому PersistenceFactory и преобразовать предыдущий пример в строку, подобную следующей.

$finder = woo_mapper_PersistenceFactory::getFinder( woodomain_Venue’ );

Но я оставляю эту работу вам.

Программист клиентского кода должен затем перейти к получению коллекции объектов Venue.

$idobj = $factory->getIdentityObject()->field(‘name’)

->eg(‘The Eyeball Inn’); $collection = $finder->find{ $idobj );

foreach ( $collection as $venue ) {

print r( $venue );

}

P.S. После того как вы создали сайт необходимо заняться его раскруткой в поисковых системах, если в этом деле вы не ас, тогда в помощь вам специализированные сервисы и эта статья о том как снизить бюджет в сеопульте

Комментарии запрещены.