Domanda

Guardando l'esempio di un oggetto di dominio nel tutorial di Zend QuickStart e altri esempi considerando un modello DAO/VO, entrambi sembrano essere molto simili.

Possiamo dedurre che dire "Value Object" è lo stesso di dire "Oggetto Domain"?

In caso contrario, puoi chiarire le differenze tra quelle?

Qual è la funzione di uno e cosa succede se la funzione di un altro?

Lo sto chiedendo perché entrambi sono composti da getter e setter e niente di più. Sembra che facciano la stessa funzione ...

Aggiornare:

Quindi, documentazione rapida di Zend Framework chiamata questo, un oggetto di 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) A rigor di termini, siamo di fronte a un "oggetto di dominio anemico"?

2) Si chiama "Oggetto dominio" Appena Perché contiene la logica del dominio?

3) In tal caso, quei mapper contenenti metodi come findBookByAuthor (); Hanno anche a che fare con la logica del dominio, giusto? Potrebbero essere considerati anche oggetti di dominio?

Molte grazie

È stato utile?

Soluzione

In genere un oggetto di valore incapsula qualcosa che ha un valore: valuta, date, temperatura, ecc. Possono contenere un valore e unità, ma non sono complessi.

È probabile che un oggetto di dominio sia più complesso (a meno che non sia un oggetto di dominio anemico, che è un mucchio di getter e setter che fingono di essere un oggetto di dominio) perché contiene la logica del dominio.

Ad esempio, potresti avere un oggetto di dominio della fattura che contiene molte linee di fattura (una riga per ogni articolo di fattura) e ogni linea di fattura potrebbe avere un importo netto, un importo fiscale e un articolo di fattura. Gli importi e forse l'elemento fatturazione in genere sarebbero oggetti di valore e sarebbero ragionevolmente semplici.

La stessa fattura potrebbe essere complicata dai tassi di interesse per il pagamento in ritardo, il supporto per un processo di approvazione o il supporto per il sistema contabile.

L'oggetto valore è abbastanza semplice da essere riutilizzabile in diversi domini. Gli oggetti di dominio modellano il tuo dominio effettivo e vengono in genere scritti per modellare il tuo business o il dominio specifico, inclusa la logica aziendale.

Il motivo per cui spesso vedrai poca differenza tra loro è che molti sviluppatori utilizzeranno uno script di transazione/progettazione di oggetti di trasferimento dati, ma lo chiamerà un modello di dominio. Etichettano le loro collezioni di "oggetti di dominio" di Getters e Setter.

Altri suggerimenti

Essi Potere essere la stessa cosa. E in molti casi lo sono. Tuttavia:

  • Gli oggetti di dominio possono eseguire la logica aziendale (almeno in base al design basato sul dominio), gli oggetti del valore non possono
  • Gli oggetti di dominio hanno l'intera informazione, mentre gli oggetti di valore hanno solo una parte delle informazioni pertinenti al suo consumatore.

Ad esempio, in caso di un Invoice Oggetto dominio, sarà lo stesso dell'oggetto valore e quindi puoi utilizzare la stessa classe per entrambi: avrà un numero di fattura, articoli ordinati, prezzo totale.

D'altra parte, a User L'oggetto Domain avrà un campo di password e un campo e -mail, che si desidera essere in grado di elaborare all'interno del tuo sistema, ma non dovresti mai inviare ad altri sistemi. Quindi hai bisogno di un nuovo oggetto di valore, che manca di questi due campi.

Basandosi sulle risposte precedenti, sono dell'opinione che lo siano non lo stesso:

  1. Gli oggetti di dominio possono contenere la logica aziendale. Rappresentano entità nello spazio problematico, i loro valori di proprietà possono essere modificati e sono identificati da un ID univoco.
  2. Secondo la banda di quattro, valori oggetti sono immutabili. Tali oggetti non sono identificati da nessun ID, ma invece dal loro valore.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top