Architettura dell'applicazione

2

prima di tutto sono nuovo qui e spero che questo sia il posto giusto per la mia domanda. Ho una domanda sull'architettura consigliata di un progetto.

IDEA: automatizza alcuni calcoli relativi all'aerodinamica. Ho alcuni dati di input e ho bisogno di elaborare questi dati in diversi sottocalcoli. Puoi vedere un tale calcolo in qualche modo come una scatola nera:

INPUT = > CALCULATION = > RISULTATI

Alcuni di questi calcoli sono già disponibili come programmi open source e alcuni di essi devo programmare da solo. Questo non dovrebbe essere un problema. Ma voglio collegare questi calcoli in modo flessibile. Ad esempio:

INPUT = > CALCOLO 1 = > CALCOLO 2 = > CALCOLO 3 = > RISULTATI

Il numero e l'ordine dei calcoli dovrebbero essere modificabili. Dovrei vedere ogni calcolo come programma standalone e collegarli in una sorta di framework in cui posso specificare l'ordine e gli argomenti delle chiamate di programma? O ci sono altre tecniche per risolvere problemi come questo?

Grazie mille per ogni consiglio e ogni raccomandazione.

Sebastian

    
posta s.greshake 31.03.2013 - 13:22
fonte

1 risposta

3

Quello che stai considerando è uno dei principi della filosofia Unix: costruisci molti piccoli strumenti e li stringa insieme in pipeline per renderne più grandi.

Un esempio reale di ciò che mette in parallelo il tuo problema è un insieme di programmi chiamati NetPBM . NetPBM è costituito da più di 200 filtri che possono essere pipeline per leggere un'immagine in uno qualsiasi dei lunghi formati, manipolarlo come una lunga lista di modi, spesso più di una volta, e scrivere i risultati in qualsiasi formato supportato . La chiave per far funzionare questi strumenti è l'uso di un set fisso di formati standard per i dati che ciascun filtro può leggere e / o scrivere o può essere derivato utilizzando un filtro di conversione.

Nel tuo caso, purché il formato di output di qualsiasi calcolo possa essere letto da qualsiasi altro, puoi mescolarli e abbinarli nell'ordine che preferisci. Ad esempio, se tutto fosse una matrice 10x10, una delle seguenti cose funzionerebbe alla perfezione (il simbolo "|" significa "pipe" o "dirige l'output del programma sul lato sinistro all'ingresso del programma sulla destra"). side "):

Get Input | Calculation 1 | Calculation 2 | Calculation 3 | Write Output
Get Input | Calculation 3 | Calculation 2 | Calculation 1 | Write Output
Get Input | Calculation 1 | Write Output
Get Input | Calculation 1 | Calculation 3 | Write Output

Come accennato nel tuo commento, potresti dover scrivere filtri per fare conversioni, e va bene, perché si adattano all'idea di avere una cassetta degli attrezzi piena di piccoli strumenti utili:

Get Input | Calculation 1 | Convert 1 out to 2 in | Calculation 2 | Write Output

Detto questo, ti esorto a esplorare uno strumento di analisi numerica come MATLAB o Octave . Entrambi sono progettati specificamente per questo genere di cose. Una volta che hai superato la curva di apprendimento, passerai molto più tempo a fare matematica e molto meno tempo di programmazione.

    
risposta data 31.03.2013 - 18:54
fonte

Leggi altre domande sui tag