Domanda

Sto lavorando a diversi progetti distinti ma correlati in diversi linguaggi di programmazione. Alcuni di questi progetti devono analizzare i nomi di file scritti da altri progetti e aspettarsi un certo modello di file.

Questo modello è ora codificato in più punti e in diverse lingue, rendendolo una bomba di manutenzione. È abbastanza facile definire questo modello esattamente una volta in un determinato progetto, ma quali sono le tecniche per definirlo una volta per tutte per tutti i progetti e per tutte le lingue in uso?

È stato utile?

Soluzione

Creare una lingua specifica del dominio, quindi compilarla nel codice per ciascuna delle lingue di destinazione che si sta utilizzando sarebbe la soluzione migliore (e la più elegante).

Non è difficile creare un DSL - appassire lo incorpora in qualcosa (come all'interno di Ruby poiché è la cosa 'in' in questo momento, o in un'altra lingua come LISP / Haskell ...), o creare una grammatica da zero (usare ANTLR?). Sembra che il progetto sia grande, quindi questo percorso vale la pena.

Altri suggerimenti

Memorizzerei il modello in un semplice file di testo e, a seconda di un particolare progetto:

  • Incorporalo nel sorgente al momento della compilazione (preelaborazione)
  • Se quanto sopra non è un'opzione, trattalo come un file di configurazione letto in fase di esecuzione

Modifica: suppongo che il modello non sia più complicato di una regex, altrimenti andrei con la soluzione DSL da un'altra risposta.

È possibile utilizzare uno script, un processo o un servizio Web comuni per generare i nomi dei file (a seconda della configurazione).

Non so di quali lingue stai parlando ma la maggior parte delle lingue può usare librerie dinamiche esterne dll / oggetti condivisi ed esportare funzionalità comuni da questa libreria. Ad esempio, implementando la funzione ottieni il nome del file in semplice libreria e usi acrros resto delle lingue.
Un'altra opzione sarà quella di creare dinamicamente codice comune come parte del processo di compilazione per ogni lingua, ciò non dovrebbe essere troppo complesso.
Suggerirò di utilizzare l'approccio di collegamento dinamico, se possibile (non hai fornito informazioni sufficienti per determinarlo), dal momento che mantenere questa soluzione sarà molto più semplice del mantenimento della generazione di codice per lingue diverse.

Inserisci il modello in un database: il modo più semplice e comodo potrebbe essere usare il database XML. Questo database sarà accessibile da tutti i progetti e leggeranno il modello da lì

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top