Devo spostare il mio servizio di determinazione dei prezzi e la creazione di entità nel servizio 'SaveLineItem'?

1

Questa è una domanda di progettazione / refactoring MVC.

Uso un controller e all'interno eseguo queste attività:

  1. Ottiene il prezzo di un oggetto da un database, per il quale utilizzo un modello di repository
  2. Crea un oggetto LineItem , che inizializzo con il prezzo e altri dati
  3. Eseguo il comando "salva nel database", per il quale utilizzo un servizio SaveLineItem . È un servizio semplice che salva solo LineItem

Attualmente tutte e 3 le azioni di cui sopra si verificano nel controller

Tuttavia, mi chiedo se farò meglio spostando le azioni 1 e 2 nel servizio SaveLineItem , assegnando così maggiori responsabilità a quel servizio.

Così facendo avrò un controller più piccolo, ma avrò anche un servizio più gonfio. Quello che prima era un servizio che si occupava solo dell'oggetto LineItem , ora si occuperà di ottenere il prezzo dell'oggetto, creando l'oggetto LineItem e quindi salvandolo.

La mia domanda è, dovrei fare questo refactoring? Il servizio è eccessivo e l'assegnazione di maggiori responsabilità è più importante se si mantiene gonfio il controller?

    
posta Dennis 19.06.2018 - 20:39
fonte

2 risposte

1

Credo che potrebbe essere utile mantenere il servizio SaveLineItem semplice (ovvero non modificarlo) e creare invece un servizio separato per creare LineItem e spostare 1 e 2 in quel servizio.

Questo dà il meglio di entrambi i mondi - le mosse vanno a gonfie da Controller al nuovo servizio e mantiene il SaveLineItem service semplice e focalizzato solo sull'elemento pubblicitario.

Il costo complessivo qui è la creazione di quel nuovo servizio

    
risposta data 19.06.2018 - 21:31
fonte
1

In effetti, raggruppare tutte e tre le tue azioni nel servizio saveLineItem sarebbe una pessima idea, come hai capito nella tua risposta, perché i passaggi 1 e 2 riguardano solo i nuovi elementi.

Ma la logica per farlo non è legata al gonfiore di alcuni strati più di altri; riguarda la separazione delle preoccupazioni tra i diversi livelli. Lasciatemi spiegare più in dettaglio.

Nell'architettura MVC originale :

  • il modello rappresenta la "conoscenza", che ora chiameremmo la logica del dominio. Nel tuo caso, è tutto ciò che il sistema ha a che fare con gli elementi pubblicitari, indipendentemente da come l'utente lo farà.
  • il controller è il collegamento tra l'utente e il sistema. Traduce le azioni dell'utente in azioni di visualizzazione e dominio.

Quindi il modo migliore per affrontare la tua domanda è avere due servizi di dominio:

  • uno per creando un nuovo elemento pubblicitario. In genere, se si tratta di un elemento pubblicitario in un documento commerciale, è necessario ad esempio assegnare un nuovo numero di elemento di linea cronologico, mantenere gli elementi pubblicitari nel giusto ordine e fare altre cose che non è necessario fare per linee esistenti.
  • uno per modifica di un elemento pubblicitario. In genere, in un documento commerciale non si rinumerebbe l'elemento che si salva (a meno che non si tratti di inserire un nuovo articolo) e non si ignorerebbe il prezzo che l'utente ha appena modificato.

Ne avrai sicuramente bisogno anche per l'eliminazione degli elementi pubblicitari.

Tuttavia, non sono sicuro che il passaggio 1 debba davvero andare insieme al passaggio 2 nel livello del modello: questo pacchetto di azioni sembra essere più correlato al modo in cui l'utente esegue la creazione, piuttosto che un principio neutro relativo al modello che deve essere sempre seguito (cioè l'utente digita un riferimento materiale, e lo cercherai come prezzo predefinito, ma cosa succede se l'utente ha già inserito un prezzo scontato?). Fino a te per prendere una decisione in base alle esigenze e al contesto.

    
risposta data 24.06.2018 - 10:47
fonte

Leggi altre domande sui tag