zfs-domain-model
ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ»ΠΎΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠΌ ΠΠ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Zend\Db Π΄Π»Ρ ZF2/ZFStarter ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²., (*1)
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
- ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π² ΠΊΠΎΠ½ΡΠΈΠ³ ΡΠ°Π±ΡΠΈΠΊΡ ΡΠ΅ΡΠ²ΠΈΡΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Gateway'Π΅Π²:
'service_manager' => array(
'factories' => array(
'ZFS\DomainModel\Service' => 'ZFS\DomainModel\Service\Factory'
)
)
- ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π°Π»ΠΈΠ°Ρ Π½Π° Π΄Π΅ΡΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΠ:
'service_manager' => array(
'aliases' => array(
// Π΄ΠΎΠΏΡΡΡΠΈΠΌ, Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΠ ΠΊΠ°ΠΊ 'Db\Adapter'
// ΡΡΠΎΠ± ZFS\DomainModel ΠΌΠΎΠ³Π»Π° Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π΄Π΅Π»Π°Π΅ΠΌ Π°Π»ΠΈΠ°Ρ:
'ZFS\DomainModel\Adapter' => 'Db\Adapter'
)
)
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ:
- Π‘ΠΎΠ·Π΄Π°ΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΡ ΡΠ°Π±ΡΠΈΠΊΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Gateway'Π΅Π²:, (*2)
<?php
namespace Application\Model\Gateway;
use ZFS\DomainModel\Gateway\AbstractFactory as BaseAbstractFactory;
class AbstractFactory extends BaseAbstractFactory
{
protected $provides = array(
'UsersGateway' => array(
'tableName' => 'users'
)
);
}
- Π Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΡ ΡΠ°Π±ΡΠΈΠΊΡ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ServiceManager'Π°:
'service_manager' => array(
'abstract_factories' => array(
'Application\Model\Gateway\AbstractFactory'
)
)
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Gateway ΡΠ΅ΡΠ΅Π· ΡΠ΅ΡΠ²ΠΈΡ Π»ΠΎΠΊΠ°ΡΠΎΡ (Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°):, (*3)
/** @var \ZFS\DomainModel\Gateway\TableGateway $gateway */
$gateway = $this->getServiceLocator()->get('UsersGateway');
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ·Π΄Π°Π»Π° ZFS\DomainModel\Gateway\TableGateway, ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΠΊ ΡΠ°Π±Π»ΠΈΡΠ΅ 'users', ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ZFS\DomainModel\ResultSet\ResultSet ΠΊΠ°ΠΊ ΠΏΡΠΎΡΠΎΡΠΈΠΏ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ select ΠΈ ZFS\DomainModel\Object\ObjectMagic ΠΊΠ°ΠΊ ΠΏΡΠΎΡΠΎΡΠΈΠΏ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ ΡΡΡΠΎΡΠΊΠΈ ΡΠ°Π±Π»ΠΈΡΡ. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ __get ΠΈ __set Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ ΡΡΡΠΎΡΠΊΠΈ., (*4)
Π Π°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠ±ΡΡΡΠ°ΠΊΡΠ½Π°Ρ ΡΠ°Π±ΡΠΈΠΊΠ° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Gateway ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΠΏΡΠΈΠΉ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ
Π² ZFS\DomainModel\Service\Options:, (*5)
const OPTION_TABLE_GATEWAY = 'tableGateway'; // ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°, ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· new
const OPTION_TABLE_NAME = 'tableName'; // ΠΈΠΌΡ ΡΠ°Π±Π»ΠΈΡΡ, Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅
const OPTION_ADAPTER = 'adapter'; // ΠΈΠΌΡ, Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π· ServiceLocator
const OPTION_TABLE_FEATURES = 'tableFeatures'; // ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ***Feature
const OPTION_RESULT_SET_PROTOTYPE = 'resultSetPrototype'; // ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°, ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· new
const OPTION_OBJECT_PROTOTYPE = 'objectPrototype'; // ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°, ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· new
const OPTION_SQL = 'sql'; // ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°, ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· new
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΊΠ»Π°ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡΡΡ ΠΎΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈΠ· ZFS\DomainModel
OPTION_OBJECT_PROTOTYPE Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ZFS\DomainModel\Object\ObjectInterface.
ΠΠΎΠΌΠΈΠΌΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, Π² ΡΠ°ΡΠΏΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° Π΅ΡΡΡ ZFS\DomainModel\Object\Object ΠΈ ZFS\DomainModel\Object\ObjectMagic. ΠΠ΅ΡΠ²ΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π΄Π»Ρ Π»ΡΠ±ΠΈΡΠ΅Π»Π΅ΠΉ ΠΏΠΈΡΠ°ΡΡ Π³Π΅ΡΡΠ΅ΡΡ ΠΈ ΡΠ΅ΡΡΠ΅ΡΡ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅ΡΠΎΠ΄Ρ:, (*6)
<?php
namespace Application\Model\Object;
use ZFS\DomainModel\Object\Object;
class User extends Object
{
protected $primaryColumns = array(
'id'
);
public function getId()
{
return $this->data['id']; // Π½Π°ΠΏΡΡΠΌΡΡ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π° Π΄Π°Π½Π½ΡΡ
}
public function getName()
{
return $this->get('name'); // ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΡ $fieldToColumnMap, Π° ΡΠ°ΠΊ ΠΆΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ null Π΅ΡΠ»ΠΈ isset($this->data[$name]) == false
}
}
ΠΡΠΎΡΠΎΠΉ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΡΡΠΈΡΠ΅Π½. ΠΡΠΏΠΎΠ»ΡΡΠ·Π΅Ρ __get ΠΈ __set Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΏΠΎΠ»ΡΠΌ, Π²Π½ΡΡΡΠΈ ΠΊΠΎΡΠΎΡΡΡ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ $this->get() (ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ° Π²ΡΡΠ΅) ΠΈ $this->set():, (*7)
<?php
namespace Application\Model\Object;
use ZFS\DomainModel\Object\ObjectMagic;
/**
* @property int id
* @property string name
*/
class User extends ObjectMagic
{
protected $primaryColumns = array(
'id'
);
}
PHPDoc @property ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π΄Π»Ρ Π°Π²ΡΠΎΠΊΠΎΠΌΠΏΠ»ΠΈΡΠ°., (*8)
Π ΠΏΠΎΠΌΠΎΡΡ camelCase ΡΡΠΈΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ underscore ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ Π² ΠΠ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ $fieldToColumnMap:, (*9)
<?php
namespace Application\Model\Object;
use ZFS\DomainModel\Object\ObjectMagic;
/**
* @property int id
* @property string name
* @property string dateOfBirth
*/
class User extends ObjectMagic
{
protected $primaryColumns = array(
'id'
);
protected $fieldToColumnMap = array(
'dateOfBirth' => 'date_of_birth'
);
}
ΠΡΡΠ΅ΡΡΡ Π»ΠΈΡΠ½ΠΈΠ΅ ΠΏΠΎΠ»Ρ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ $data (ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ ObjectMagic), ΠΊΠΎΡΠΎΡΡΡ
Π½Π΅Ρ Π² ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ZFS\DomainModel\Feature\FilterColumnsFeature, ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅Π΅ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Gateway:, (*10)
<?php
namespace Application\Model\Gateway;
use ZFS\DomainModel\Feature\FilterColumnsFeature;
use ZFS\DomainModel\Gateway\AbstractFactory as BaseAbstractFactory;
use ZFS\DomainModel\Service\Options;
class AbstractFactory extends BaseAbstractFactory
{
public function __construct()
{
$this->provides['UsersGateway'] = array(
Options::OPTION_TABLE_NAME => 'users',
Options::OPTION_TABLE_FEATURES => array(new FilterColumnsFeature()),
Options::OPTION_OBJECT_PROTOTYPE => 'Application\Model\Object\User'
);
}
}
ΠΠ΄Π΅ΡΡ, ΠΊΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, ΠΊΠ»ΡΡΠΈ ΠΎΠΏΡΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΈΠ· Options, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΠ΅Π½ΠΎ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΈΠ·-Π·Π° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΠ½ΡΡΠ°Π½Ρ FilterColumnsFeature ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Application\Model\Object\User ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ° Π²ΡΡΠ΅., (*11)
ΠΠΈΡΠ΅Π½Π·ΠΈΡ
MIT, (*12)