Доктрина 2 Объекты Ценности - PullRequest
8 голосов
/ 09 декабря 2011

Я реализовывал объекты-значения в качестве пользовательских типов DBAL в Doctrine 2, и он работает нормально.Однако мне было интересно, если это лучший способ.Я думал об использовании слушателя Post Load для создания экземпляров объектов Value.Кроме того, создавая их экземпляры через средства доступа Entity по запросу, преимущество последнего заключается в том, что я не буду создавать экземпляры большего количества объектов, чем мне нужно.

Мой вопрос: какой метод лучше?Или есть лучший способ сделать это?Есть ли какие-либо ошибки или необоснованные хиты производительности с вышеупомянутым?

1 Ответ

8 голосов
/ 11 декабря 2011

ИМХО, оба подхода одинаково полезны, ожидая при этом встроенной поддержки для объектов-значений .

Я лично предпочитаю второй подход (создание экземпляров их через средства доступа по запросу) по двум причинам:

  • Как вы упомянули, он предлагает лучшую производительность, поскольку преобразование выполняется только при необходимости;
  • Он отделяет ваше приложение от зависимости от Doctrine: вы пишете меньше кода, специфичного для Doctrine.

Пример такого подхода:

class User
{
    protected $street;
    protected $city;
    protected $country;

    public function setAddress(Address $address)
    {
        $this->street  = $address->getStreet();
        $this->city    = $address->getCity();
        $this->country = $address->getCountry();
    }

    public function getAddress()
    {
        return new Address(
            $this->street,
            $this->city,
            $this->country
        );
    }
}

Этот код будет довольно легко реорганизовать, когда Doctrine предложит собственную поддержку VO.

О пользовательских типах отображения , я их тоже использую, для однополевого VO (Decimal, Point, Polygon, ...), но склонен резервировать их универсальные, многоразовые типы, которые можно использовать в нескольких проектах, а не для специализированного однополевого ВО, где я бы предпочел подход, описанный выше.

...