Вопрос

Посмотрев на пример объекта домена в учебник Zend QuickStart, и другие примеры, рассматривающие шаблоны DAO/VO, они оба кажутся очень похожими.

Можем ли мы сделать вывод, что сказать «объект значения», так же, как сказать «объект домена»?

Если нет, не могли бы вы уточнить различия между ними?

Какова функция одного, а что, если функция другого?

Я спрашиваю об этом, потому что оба составлены Getters и Setters и не более чем, чем. Кажется, что они выполняют ту же функцию ...

Обновлять:

Итак, Zend Framework Quick Dutorial Documentation под названием это, объект домена:

 // application/models/Guestbook.php

    class Application_Model_Guestbook
    {
        protected $_comment;
        protected $_created;
        protected $_email;
        protected $_id;

        public function __construct(array $options = null)
        {
            if (is_array($options)) {
                $this->setOptions($options);
            }
        }

        public function __set($name, $value)
        {
            $method = 'set' . $name;
            if (('mapper' == $name) || !method_exists($this, $method)) {
                throw new Exception('Invalid guestbook property');
            }
            $this->$method($value);
        }

        public function __get($name)
        {
            $method = 'get' . $name;
            if (('mapper' == $name) || !method_exists($this, $method)) {
                throw new Exception('Invalid guestbook property');
            }
            return $this->$method();
        }

        public function setOptions(array $options)
        {
            $methods = get_class_methods($this);
            foreach ($options as $key => $value) {
                $method = 'set' . ucfirst($key);
                if (in_array($method, $methods)) {
                    $this->$method($value);
                }
            }
            return $this;
        }

        public function setComment($text)
        {
            $this->_comment = (string) $text;
            return $this;
        }

        public function getComment()
        {
            return $this->_comment;
        }

        public function setEmail($email)
        {
            $this->_email = (string) $email;
            return $this;
        }

        public function getEmail()
        {
            return $this->_email;
        }

        public function setCreated($ts)
        {
            $this->_created = $ts;
            return $this;
        }

        public function getCreated()
        {
            return $this->_created;
        }

        public function setId($id)
        {
            $this->_id = (int) $id;
            return $this;
        }

        public function getId()
        {
            return $this->_id;
        }
    }

1) Строго говоря, мы перед лицом «объекта анемичной области»?

2) Это называется «доменное объект» просто Потому что он содержит доменную логику?

3) Если это так, то те сортировщики, содержащие такие методы, как FindBookByAuthor (); Они также имеют дело с логикой доменов, верно? Могут ли их считать доменные объекты?

Большое спасибо

Это было полезно?

Решение

Обычно объект значения инкапсулирует что -то, что имеет значение: валюта, даты, температура и т. Д. Они могут содержать значение и единицы, но они не сложны.

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

Например, у вас может быть объект домена счета -фактуры, который содержит множество линий счетов (строка для каждого элемента счета), и каждая линия счета -фактуры может иметь чистую сумму, налоговую сумму и пункт счета -фактуры. Суммы и, возможно, элемент счета -фактуры, как правило, будут объектами значения и будут достаточно простыми.

Сам счета -фактура может быть сложным с процентными ставками для просроченной оплаты, поддержкой процесса утверждения или поддержкой вашей системы бухгалтерского учета.

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

Причина, по которой вы часто увидите небольшую разницу между ними, заключается в том, что многие разработчики будут использовать сценарий транзакций/дизайн объекта передачи данных, но назовуте его моделью домена. Они маркируют свои коллекции геттеров и сеттеров «доменных объектов».

Другие советы

Они Можно быть тем же. И во многих случаях они есть. Однако:

  • Объекты домена могут выполнять бизнес-логику (по крайней мере, в соответствии с доменной дизайном), объекты значения не могут
  • Объекты домена имеют всю информацию, в то время как объекты значений содержат только часть информации, которая имеет отношение к его потребителю.

Например, в случае Invoice Объект домена, он будет таким же, как и объект Value, а затем вы можете использовать один и тот же класс для обоих - он будет иметь номер счета, заказанные предметы, общая цена.

С другой стороны, User Domain Object будет иметь поле пароля и поле электронной почты, которое вы хотите иметь возможность обрабатывать в своей системе, но вы никогда не должны отправлять в другие системы. Следовательно, вам нужен новый, ценностный объект, которому не хватает этих двух полей.

Опираясь на предыдущие ответы, я считаю, что они нет одинаковый:

  1. Доменные объекты могут содержать бизнес -логику. Они представляют сущности в проблемном пространстве, их значения свойства могут быть изменены и идентифицированы с помощью уникального идентификатора.
  2. Согласно банде четырех, значения объектов неизменны. Анкет Такие объекты не идентифицированы ни одним идентификатором, а вместо этого по их значению.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top