17
Авг
2017

Создание сущности или в каких случаях оправданы сеттеры?

Как правило при работе с сущностями есть 2 подхода.

  • вносить данные через конструктор
  • вносить данные через сеттеры

Я выбрал подход с вводом данных через конструкторы, так как в нем нет нарушений целостности данных и он гарантирует имутабельность сущности.

Пример сущности:

<?php

class System
{
    private $id;
    private $alias;
    private $status;
    private $date;

    public function __construct
    (
        int $id,
        string $alias,
        Currencies $supportedCurrencies,
        SystemStatus $status,
        SystemServiceInfo $serviceInfo,
        Date $date
    )
    {
        $this->id = $id;
        $this->alias = $alias;
        $this->supportedCurrencies = $supportedCurrencies;
        $this->status = $status;
        $this->serviceInfo = $serviceInfo;
        $this->date = $date;
    }

    public function getId(): int
    {
        return $this->id;
    }

    public function getAlias(): string
    {
        return $this->alias;
    }

    public function getStatus(): SystemStatus
    {
        return $this->status;
    }

    public function getDate(): Date
    {
        return $this->date;
    }
}

в ходе этого я с толкнулся с такой проблемой, что когда нужно обновить 1 поле, нужно пересобрать сущность (да, тут конечно сеттер был бы к стати). На ум приходит только одно фабрика + полное создание новой сущности.

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

Как в таких случаях (собирать сущность) лучше всего поступать ?

Источник: https://ru.stackoverflow.com/questions/707374/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D1%83%D1%89%D0%BD%D0%BE%D1%81%D1%82%D0%B8-%D0%B8%D0%BB%D0%B8-%D0%B2-%D0%BA%D0%B0%D0%BA%D0%B8%D1%85-%D1%81%D0%BB%D1%83%D1%87%D0%B0%D1%8F%D1%85-%D0%BE%D0%BF%D1%80%D0%B0%D0%B2%D0%B4%D0%B0%D0%BD%D1%8B-%D1%81%D0%B5%D1%82%D1%82%D0%B5%D1%80%D1%8B

Share

Тебе может это понравится...