Progettazione modulare del sistema di generazione dati

1

Sto cercando di pensare al modo più ragionevole di progettare l'architettura di un sistema di generazione dati con diversi passaggi.

I dati nel sistema attraversano diverse trasformazioni che possono essere suddivise in passaggi separati (dal punto di vista della logica aziendale).

Desidero che il sistema mantenga questo design modulare, in modo tale che ogni modulo rappresenti un passaggio nella trasformazione dei dati.

L'ingresso di un modulo dovrebbe essere l'uscita del modulo precedente.

  1. Quali sono alcuni buoni modi per orchestrare questo flusso?
  2. In che modo i moduli possono comunicare tra loro?
  3. In ogni passaggio, da dove dovrebbe provenire l'input e dove dovrebbe andare l'output?
  4. È una buona idea utilizzare un database come fonte e destinazione del consumo / generazione di dati per ogni modulo?
  5. I moduli dovrebbero essere costruiti come script / eseguibili separati che solo comunicare direttamente con il database?

Modifica

Il sistema sarà implementato da più persone. Ad ogni sviluppatore verrà assegnato un modulo. Vorrei che l'architettura semplificasse il flusso di lavoro consentendo a ciascuno sviluppatore di lavorare in modo indipendente; e fare assunzioni solo sui dati che il loro modulo specifico consuma.

Modifica 2 :

La relazione dei moduli è illustrata di seguito.

I moduli sono rappresentati come caselle blu. Alcuni moduli dipendono da dati generati da altri moduli (frecce nere). Alcuni moduli devono mantenere i dati sul DB (frecce tratteggiate grigie).

    
posta EyalAr 07.08.2014 - 09:31
fonte

1 risposta

2

Pipelines sono paradigmi estremamente comuni nella progettazione di software. Sono abbastanza comuni negli ambienti di scripting (la maggior parte delle shell), in cui ogni fase è separata dal programma / processo e dal mondo funzionale, in cui ogni passaggio è una funzione. Dovresti trarre ispirazione da loro.

What are some good ways to orchestrate this flow? How should modules communicate with each other? In each step, where should the input come from, and where should the output go?

Di solito c'è qualcuno che fa tutto questo. Assicura che ogni parte sia chiamata nell'ordine giusto con i dati corretti.

Is it a good idea to use a database as the source and target of data consumption / generation for each module?

Credo che i moduli dovrebbero essere indipendenti su come vengono memorizzati i dati intermedi. Ottiene solo i dati in un formato comune.

Should modules be built as separate scripts / executables which only directly communicate with the database?

Dovrebbero essere tutti separati. Ma dovrebbero ricevere i dati, non estrarli.

Una cosa che ti viene in mente per tutto questo è che hai due soluzioni su come trasferire i dati:

  • Applicare una progettazione rigorosa delle strutture dati, che vengono passate tra i moduli, in modo che dipendano tutti da questi.
  • Ogni modulo deve creare la propria struttura dati e avere "passaggi di trasformazione" tra i moduli, che dipendono dalle strutture di dati dei moduli tra cui si trova questa trasformazione. Questo è comune nelle shell, dove si usano strumenti di manipolazione del testo per trasformare l'output di un programma in input di altri.
risposta data 07.08.2014 - 12:14
fonte

Leggi altre domande sui tag