Domanda

Per un piccolo progetto notturno vorrei scrivere un componente di validazione che potrebbe essere usato nell'applicazione .NET per fare la solita e noiosa validazione di oggetti, parametri di input e condizioni di post.

La mia prima idea è stata quella di scaricare tutta questa logica di configurazione della convalida in un file di configurazione XML e fornire un'interfaccia liquida per le persone che vorrebbero averla nel codice.

Poiché vorrei fornire qualcosa che è effettivamente utilizzabile, ho pensato di fornire un DSL specializzato (linguaggio specifico del dominio). La domanda è: quali strumenti devo usare per fare questo?

Ho pensato di analizzarlo a mano usando regex. Ma personalmente vorrei avere qualcosa di più ... utilizzabile.

Quindi cosa suggeriresti?

È stato utile?

Soluzione

Se stai specificamente guardando un DSL, dai un'occhiata al progetto ANTLR . L'abbiamo usato con successo nella mia azienda in passato.

Altri suggerimenti

Sembra che tu stia parlando dell'implementazione di una delle funzionalità di .Net 4.0, contratti di codice .

Quindi immagino che il mio strumento consigliato sarebbe VS.Net 2010.

La cosa con DSl è che raramente sono efficaci in isolamento. Per essere utile per scrivere software vero, devi davvero essere in grado di incorporare il DSL in una lingua host. Confronta, ad esempio, il modo in cui Linq funziona rispetto al semplice SQL. Un altro buon esempio è la funzione letterale XML in VB. Entrambi consentono di scrivere codice reale, in un PL generico e intrecciarlo con un codice DSL dichiarativo più semplice.

Il risultato è qualcosa di molto più potente di SQL stand-alone o di un semplice editor XML.

Il lato negativo di questo, sfortunatamente, è che né C # né VB offrono funzionalità di meta-programmazione, quindi l'unico modo per farlo per gli sviluppatori .net mainstream è costruire il tuo linguaggio. Se questo è qualcosa che stai facendo solo per divertimento, potresti essere in grado di modificare il compilatore mono C # per aggiungere le funzionalità che ti interessano alla lingua. Un'altra alternativa potrebbe essere quella di provare il rubino. Ha una sintassi flessibile che ti permette di cavartela con molta follia. Personalmente, preferirei l'approccio hackerato C #.

Potrebbe voler dare un'occhiata a Creazione di lingue specifiche del dominio in Boo (Boo è un linguaggio CLR, i concetti dovrebbero essere riportati in C #). Un progetto di esempio è Simple State Machine .

Dai un'occhiata a Oslo di Microsoft, non sono sicuro che lo faccia quello che vuoi, ma so che puoi creare parser DSL e specificare grammatiche e far sì che generi librerie di classi in grado di analizzare i dati in base alla grammatica.

Maggiori dettagli su " M " lingua e come usarla sono qui

Perché andare così lontano? Inizia usando generici e un'interfaccia fluida. Inizia semplice e lavoraci attraverso un po 'di produzione. Se l'attrito è troppo elevato rispetto a un'interfaccia fluida, allora guarda usando un DSL.

Puoi provare DSL Tools per Visual Studio.

Dovresti guardare il progetto Irony su http://irony.codeplex.com/

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