In DDD, le entità sono autorizzate a utilizzare il database per la ricerca, l'indicizzazione, ecc.?

2

È (era?) considerato best practice quando si tratta di programmazione web per consentire al database di eseguire il "sollevamento pesante", quando possibile. Ad esempio, ho un elenco di contatti e consiste di molti indirizzi e nomi di posta elettronica. Ogni email deve essere univoca, quindi una soluzione potenzialmente negativa per un modello di record attivo (Eloquent) è in questo caso:

 public function addEmail($name, $address)
 {
    if ($this->where('name', $name)->where('address', $address)->count() > 0)
  {
  throw new \Exception("Name and email already exists!");
  }

 // perform add new logic

 }

Se quello che ho capito è corretto, non dovrei farlo - che le entità dovrebbero essere semplici oggetti di dati, e incapaci di fare chiamate al DB.

In tal caso, come dovrei applicare quel bit di validazione? Utilizza un servizio o carica tutti gli indirizzi per ContactList o spostalo da qualche altra parte (un servizio AddNewEmailToConactList ?)

    
posta Extrakun 01.09.2016 - 12:02
fonte

1 risposta

1

Dai un'occhiata alle regole aziendali che governano il tuo dominio e trovi quello che ti causerà un problema e lo convaliderà nel punto in cui potresti romperlo.

Quindi, se la regola è Non ci possono essere indirizzi email duplicati nella lista dei contatti , allora la verificherai quando aggiungerai il nuovo Entry a ContactList .

Il ContactList stesso molto probabilmente avrà un metodo AddNewEntry che farà il controllo, e il ContactList o è o ha una tabella di database che può interrogare per verificare se il nome esiste già.

È perfettamente valido avere più copie degli stessi indirizzi e-mail in questo caso; semplicemente non possono andare tutti su ContactList . Potrebbe esserci anche più ContactLists , nel qual caso il codice sopra funzionerà ancora, con ogni elenco che controlla i propri contenuti. Ma in realtà dipende dal dominio esatto da cui stai lavorando.

    
risposta data 01.09.2016 - 13:55
fonte

Leggi altre domande sui tag