Pregunta

Al observar el ejemplo de un objeto de dominio en el tutorial Zend QuickStart y otros ejemplos considerando un patrón DAO/VO, ambos parecen ser muy similares.

¿Podemos deducir eso para decir que el "objeto de valor" es lo mismo que decir "objeto de dominio"?

Si no, ¿puede aclarar las diferencias entre ellos?

¿Cuál es la función de uno y qué pasa si la función de otra?

Estoy preguntando esto porque, ambos están compuestos por Getters y Setters y nada más que eso. Parece que hacen la misma función ...

Actualizar:

Entonces, la documentación de tutorial rápido de Zend Framework llamó a esto, un objeto de dominio:

 // 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) Estrictamente hablando, ¿estamos frente a un "objeto de dominio anémico"?

2) Se llama "objeto de dominio" sólo ¿Porque contiene lógica de dominio?

3) Si este es el caso, entonces, esos mapeadores que contienen métodos como findbookbyauthor (); También están lidiando con la lógica de dominio, ¿verdad? ¿Podrían ser considerados también objetos de dominio?

Muchas gracias

¿Fue útil?

Solución

Por lo general, un objeto de valor encapsula algo que tiene un valor: moneda, fechas, temperatura, etc., pueden contener un valor y unidades, pero no son complejos.

Es probable que un objeto de dominio sea más complejo (a menos que sea un objeto de dominio anémico, que es un montón de getters y setters que fingen ser un objeto de dominio) porque contiene lógica de dominio.

Por ejemplo, puede tener un objeto de dominio de factura que contenga muchas líneas de factura (una línea para cada elemento de factura), y cada línea de factura puede tener una cantidad neta, un monto del impuesto y un elemento de factura. Las cantidades y tal vez el elemento de factura generalmente serían objetos de valor y serían razonablemente simples.

La factura en sí podría complicarse con las tasas de interés para el pago atrasado, el soporte para un proceso de aprobación o el soporte para su sistema de contabilidad.

El objeto de valor es lo suficientemente simple como para ser reutilizable en diferentes dominios. Los objetos de dominio modelan su dominio real y generalmente se escriben para modelar su negocio o dominio específico, incluida su lógica comercial.

La razón por la que a menudo verá poca diferencia entre ellos es que muchos desarrolladores usarán un diseño de objeto de transacción de transacción/transferencia de datos, pero lo llamarán un modelo de dominio. Etiquetan sus colecciones de getters y setters "objetos de dominio".

Otros consejos

Ellos pueden ser lo mismo. Y en muchos casos lo son. Sin embargo:

  • Los objetos de dominio pueden realizar la lógica de negocios (de acuerdo con el diseño basado en el dominio al menos), los objetos de valor no pueden
  • Los objetos de dominio tienen toda la información, mientras que los objetos de valor poseen solo una parte de la información que es relevante para su consumidor.

Por ejemplo, en caso de un Invoice Objeto de dominio, será el mismo que el objeto de valor, y luego puede usar la misma clase para ambos: tendrá un número de factura, elementos ordenados, precio total.

Por otro lado, un User El objeto de dominio tendrá un campo de contraseña y un campo de correo electrónico, que desea poder procesar dentro de su sistema, pero nunca debe enviar a otros sistemas. Por lo tanto, necesita un nuevo objeto de valor, que carece de estos dos campos.

Sobre la base de las respuestas anteriores, soy de la opinión de que están no lo mismo:

  1. Los objetos de dominio pueden contener lógica de negocios. Representan entidades en el espacio problemático, los valores de sus propiedades pueden cambiarse y se identifican por una identificación única.
  2. Según la pandilla de cuatro, los objetos de valor son inmutables. Tales objetos no son identificados por ninguna identificación, sino por su valor.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top