Salva due oggetti di dominio diversi in una chiamata di servizio

5

Pensa che quando una filiale viene salvata, un'entità cliente deve essere creata nell'architettura di sistema a più livelli. Tutta la validazione è già stata implementata in CustomerService.

  1. Se BranchService deve creare un'istanza CustomerService da creare cliente?
  2. Il servizio Branch implementa nuovamente la convalida per Cliente e chiamata CustomerRepository?
  3. Il ramo deve avere l'entità cliente come proprietà e dovrebbe avere Validazione cliente su BranchService?

Le classi di esempio sono

Branch
    - Code
    - Description
    - CustomerId


Customer
    - Code
    - Description
    - CustomerType

BranchRepository
    - Add
    - Remove
    - Get

CustomerRepository
    - Add
    - Remove
    - Get

BranchService
    - AddBranch (Validates entities)

CustomerService 
    - AddCustomer (Validates entites)
    
posta hkutluay 11.03.2016 - 11:00
fonte

2 risposte

1

Non concentrarti troppo sulla creazione di servizi specifici per l'entità, ma utilizza servizi specifici del caso .

Il codice dovrebbe riflettere la logica e i processi aziendali e i loro casi d'uso. Se hai un caso d'uso che dice che cliente e filiale devono essere impegnati insieme, allora crea un servizio di questo tipo.

Creare un servizio CustomerBranch che comprenda sia il cliente che la filiale. È possibile memorizzare la convalida nelle entità stesse o in un servizio separato. Tocca a voi. Oppure puoi inserire i tuoi servizi attuali in questo in cui utilizzerai la loro logica di convalida.

Quindi puoi utilizzare il modello di unità di lavoro in cui utilizzi i tuoi repository solo per "notificare" a ORM che c'è una modifica in un'entità e UoW per confermare tali modifiche in DB. Il modello UoW ti consente (tra le altre cose) di commettere batch di entità modificate.

Lo schema del repository, come viene sostenuto in Internet (a mio parere sbagliato, ma è un altro argomento), si concentra sui cambiamenti da una sola entità.

    
risposta data 09.04.2017 - 10:01
fonte
0
  1. Ci sono due schemi che possono risolvere questo problema. i) Utilizzare il modello di repository per progettare il livello dati. Riferimento - link ii) Unità di lavoro link

  2. Utilizza la serializzazione del runtime sugli oggetti usando le librerie disponibili (Jackson: uno dei migliori disponibili là fuori)

  3. I punti finali del servizio mi sembrano corretti, tuttavia suggerirei di mantenere l'oggetto di riferimento del Cliente all'interno della classe del ramo.

  4. Permetti al servizio di accettare Json invece di oggetti qualificati. Questo è dove il passaggio 2 è utile.

  5. (aggiuntivo) riposa in modo elegante sui punti 2 e 4 a molla. Riferimento - link

Suppongo che tu stia costruendo la soluzione usando Java. Spero che sia d'aiuto.

    
risposta data 14.03.2016 - 20:23
fonte

Leggi altre domande sui tag