Я правильно использую Доменный объект?

По этой статье Вот

Вы можете думать о них [Сервисах] как о «Доменных объектах более высокого уровня», но вместо бизнес-логики Сервисы отвечают за взаимодействие между Доменными Объектами и Mappers. Эти структуры в итоге создают «открытый» интерфейс для взаимодействия с бизнес-логикой домена. Вы можете избежать их, но за счет утечки некоторой логики домена в контроллеры.

Я читал о MVC, и я разделил часть M на Services, Domain Objects и Data Mappers. Сервисы и Data Mappers легко понять, но я не понимаю причину доменных объектов, не могли бы вы привести несколько примеров? Вот мой код:

MemberService

class MemberService extends Service
{
public function authenticate()
{
$domainObject = $this->domainObjectFactory->getDomainObject('Member');
$dataMapper = $this->databaseFactory->getMapper('Member');

$_temp_sess_id = 0;
$_temp_sess_password = "";

$member = $dataMapper->fetch( $_temp_sess_id );
$authenticationResult = $domainObject->checkPassword( $member['password'], $_temp_sess_password );

if (!$authenticationResult)
{
$member = ['user_id' => 0];
}

return $member;
}
}

MemberDomainObject

class MemberDomainObject extends DomainObject
{
public function checkPassword( $dataMapperPassword, $locallyStoredPassword )
{
if ( $dataMapperPassword !== $locallyStoredPassword )
return false;
return true;
}
}

ОБНОВИТЬ:

Этот вопрос касается метода checkPassword и того, почему необходимо создать отдельный объект только для того, чтобы использовать оператор IF, который вместо этого можно использовать внутри службы, экономя ОЗУ от использования дополнительных ресурсов для создания нового объекта.

0

Решение

Вы только что создали MemberDomainObject через какую-то фабрику в вашем примере. Код, который вы показываете, не имеет нулевого информационного значения для этой цели.

Вам нужно создать реальное приложение с минимальным количеством объектов, служб и двух доменов, чтобы каждый мог сказать: «Вы хорошо используете объекты домена».

Вас не интересуют только «модельные объекты»? Не нужно говорить об объектах домена, если вы хотите быть уверены в правильном использовании отношения «сервис> фабрика> объект модели> маппер».


Хорошей практикой является создание объектов через фабрику, так как вы можете изменять или добавлять вызовы конструктора во время рефакторинга в одном месте.

Один совет: используйте имена классов с пространствами имен (FQN) на ваших фабриках, это поможет вам с навигацией по коду и с рефакторингом, а также

$member = $this->domainObjectFactory->getDomainObject(MemberDomainObject::class); //in php5.5+

Вы можете заменить на

class DomainObject
{

static function className(){
return get_called_class();
}
}

$member = $this->domainObjectFactory->getDomainObject(MemberDomainObject::className());

в php <= 5.4 и замените его при обновлении.

так же, как

$member = $this->domainObjectFactory->getMember();

это не проблема, так как вы можете указать возвращаемый тип в :: getMember ()

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]