DDD: visualizzazione alternativa del modello?

1

Ho una classe modello, diciamo che è una Book . Ho bisogno che venga visualizzato sullo schermo. Voglio avere una versione di fuggita , quindi non ho bisogno di uscire manualmente dai campi.

Che cosa dovrei fare? Posso

  • aggiungi un wrapper al Book che restituisce i valori di escape (ad esempio EscapedBook ); ma ogni volta che cambio il libro, ho bisogno di cambiare il wrapper - almeno per aggiungere / rimuovere metodi.

  • lancia il modello attraverso alcuni AOP e genera proxy prima che venga visualizzato sullo schermo.

  • o esegui il modello con qualche util che sfuggirà a tutte le proprietà della stringa.

IMHO questo non è un comportamento aziendale, quindi mi piacerebbe tenerlo sul livello dell'interfaccia utente.

    
posta lawpert 28.10.2014 - 23:29
fonte

1 risposta

1

Un wrapper è il modo giusto per andare qui - vuoi davvero che la parte dell'interfaccia utente del livello dell'interfaccia utente rifletta solo ciò che viene dato e non sia responsabile di qualcosa di molto tecnico rispetto ai contenuti filtranti. Vorrei correre con la prima opzione che stai guardando e creare una sottoclasse specifica per il livello dell'interfaccia utente per gestire questa attività.

Il costo reale dal punto di vista del codice di scrittura non consiste nell'aggiornare il EscapedBook ogni volta che la classe sottostante cambia: le classi sottostanti cambiano e cambieranno molte cose lungo la linea logica. Sarebbe meglio avere la rappresentazione interna che parla a una singola classe piuttosto che parlare direttamente con una dozzina di cose diverse nell'applicazione front-end.

Questa classe specifica front-end potrebbe benissimo essere generata tramite un processo proxy o AOP - questa è davvero una decisione tattica a seconda di quale sia lo stack e di quali altre dipendenze hai. Potresti voler dire avere un proxy dedicato diretto piuttosto che una classe separata. Questa non è un'idea orribile in superficie, ma alla fine preferirei il concetto di classe dedeciso - è più flessibile separare i problemi alla fine.

Qui è meglio evitare la classe di utilità: si finirà con cose come ContentUtil.CleanPage(book.Pages[1]) su tutto il livello dell'interfaccia utente e questo farà male a risolvere quando si ripensano le cose. I globali sono cattivi, anche quando i globali sono funzioni di utilità stateless.

Una cosa che non vorrei buttare fuori è che venga generata nel livello aziendale - la generazione di contenuti con escape appropriati è un requisito aziendale verificabile dell'applicazione che preferisco testare con il livello aziendale anziché provare a scrivere test automatici del UI.

    
risposta data 28.10.2014 - 23:58
fonte