Pattern per sequenziare le fasi di un lavoro in modo sequenziale contro il sistema esterno

0

Sto cercando di capire come posso rendere il codice anche per questo facile da capire ed eseguire il debug. La ragione per cui la sto chiedendo è che sembra il tipo di scenario che è stato probabilmente affrontato prima di un sacco di volte. E se questo è il caso, vorrei utilizzarlo come solido punto di partenza che consentirà di estenderlo e ridimensionarlo nel futuro della sua vita.

Ho un'applicazione web che deve eseguire molte azioni diverse contro un sistema esterno esistente. Il trigger è un'azione eseguita nel portale. L'ordine dei passaggi in fase di progettazione e devono essere eseguiti in ordine. Le azioni necessarie sono generalmente formate da pochi passaggi.

Eg.

Portal action (Job)A -->  (Task A -> Task B -> Task C)
Portal action (Job)B -->  (Task A -> Task D -> Task E)
Portal action (Job)C -->  (Task B -> Task D -> Task E)
Portal action (Job)D -->  (Task C -> Task E)
etc, etc.

I passaggi devono essere eseguiti in ordine.

Mentre ci sono scelte tecnologiche (possibilmente in coda) all'interno di questo, la cosa principale che sto cercando di decidere è una struttura di codice.

Ho preso in considerazione un paio di modelli.

  • Catena di responsabilità - Da quanto ho capito, sembrava più un filtro per le autorizzazioni / la convalida, piuttosto che un metodo per concatenare i passaggi.
  • Event Sourcing - Per ottenere il vantaggio, sembrava più adatto a nessuna esecuzione sequenziale o più abbonati allo stesso evento.

Sto ancora lottando per accettare che sto cercando un modello che non esiste. Sto cercando un consiglio su questo fronte, qual è il modello adatto per darmi un buon punto di partenza?

    
posta David C 31.10.2018 - 19:59
fonte

1 risposta

0

Non hai spiegato perché questa non potesse essere una semplice "sequenza". Cioè istruzioni separate da punto e virgola (codice di esempio in Java):

public void jobA() {
   taskA();
   taskB();
   taskC();
}

Non è molto più chiaro di così. Se si è preoccupati per le attività a esecuzione prolungata o la gestione dei thread, è possibile rendere tutte le attività non bloccanti. La maggior parte delle lingue ha qualche forma di supporto per questo, ad esempio Java ha CompletableFuture<> :

public CompletableFuture<JobAResult> jobA() {
   return taskA()
      .thenCompose(this::taskB)
      .thenCompose(this::taskC);
}

Se hai altri vincoli, dovresti menzionarli. Ad esempio, se devi eseguire le attività su host potenzialmente diversi, o ridimensionare le attività separatamente, ecc. Altrimenti non sovrascrivere la cosa.

    
risposta data 01.11.2018 - 12:25
fonte

Leggi altre domande sui tag