Domanda

Sto sentendo sempre di più su domain specific languages essere gettato e come cambiano il nostro modo di trattare la logica di business, e ho visto Ayende post dei blog e le cose, ma non l'ho mai ottenuto esattamente il motivo per cui vorrei prendere la mia logica di business di distanza dai metodi e situazioni che sto utilizzando nel mio provider.

Se hai un po ' di sfondo utilizzando queste cose, qualche possibilità che tu possa mettere in reale dei termini comuni:

  • Che cosa esattamente edificio Dsl significa?
  • Quali lingue stai usando?
  • Dove con una DSL ha un senso?
  • Qual è il vantaggio dell'utilizzo di Dsl?
È stato utile?

Soluzione

DSL sono buone in situazioni in cui è necessario dare alcuni aspetti del sistema di controllo a qualcun altro.Li ho usati in Motori delle Regole, in cui si crea un linguaggio semplice che è più facile per i meno tecnici, gente utilizzare per esprimersi - in particolare nei flussi di lavoro.

In altre parole, invece di far loro imparare il java:

DocumentDAO myDocumentDAO = ServiceLocator.getDocumentDAO();
for (int id : documentIDS) {
Document myDoc = MyDocumentDAO.loadDoc(id);
if (myDoc.getDocumentStatus().equals(DocumentStatus.UNREAD)) {
    ReminderService.sendUnreadReminder(myDoc)
}

Posso scrivere una DSL che mi permette di dire:

for (document : documents) {
if (document is unread) {
 document.sendReminder
}

Ci sono altre situazioni, ma in pratica, ovunque si potrebbe desiderare di utilizzare un linguaggio di macro, script di un flusso di lavoro, o consentire il dopo-mercato di personalizzazione - questi sono tutti candidati per DSL.

Altri suggerimenti

DSL sta per Linguaggio Specifico Dominio cioèlinguaggio progettato specificamente per la risoluzione di problemi in una data area.
Per esempio, Markdown (linguaggio di markup usato per modificare i messaggi COSÌ) può essere considerato come un DSL.

Personalmente ho trovato un posto per DSL quasi in ogni grande progetto a cui sto lavorando.Più spesso ho bisogno di un qualche tipo di SQL come linguaggio di query.Un altro uso comune è sistemi basati su regole, è necessario un qualche tipo di linguaggio per specificare le regole\condizioni.

DSL ha un senso nel contesto in cui è difficile descrivere isolvere il problema con mezzi tradizionali.

Se si utilizza Microsoft Visual Studio, si utilizza più Dsl -- la progettazione per moduli web, winform, etc.è un DSL.Il Class Designer è un altro esempio.

DSL è solo un insieme di strumenti che (almeno in teoria) fare sviluppo in un "dominio" (cioèvisual layout più semplice, più intuitiva e più produttivo.

Come lontano come la costruzione di un modem DSL, alcune delle cose che la gente come Ayende hanno scritto su è legato alla "analisi del testo" dsl, consentendo agli sviluppatori (o finali) inserire naturale "testo" in un'applicazione che analizza il testo e genera una sorta di codice o di output basato su di esso.

È possibile utilizzare qualsiasi linguaggio per costruire la vostra DSL.Microsoft Visual Studio è un sacco di punti di estendibilità, e patterns & practices "Guida Di Automazione Toolkit" e Visual Studio SDK si può aiutare in aggiunta DSL funzionalità di Visual Studio.

DSL sono compilatori basic personalizzato per le lingue.Un buon "gratuito e open' strumento per sviluppare la loro è disponibile a ANTLR.Recentemente, sono stato a guardare questo DSL per un stato in linguaggio macchina un nuovo progetto .Sono d'accordo con Tim Howland di cui sopra, che possono essere un buon modo per consentire a un altro utente di personalizzare l'applicazione.

Cordiali saluti, un libro su Dsl, è in cantiere come parte di Martin Fowler signature series.

Se il suo lo stesso standard come gli altri libri della serie, dovrebbe essere una buona lettura.

Ulteriori informazioni qui

DSL è solo un nome di fantasia e può significare diverse cose:

  • Rails (Ruby cosa) è talvolta chiamato un DSL perché aggiunge particolari metodi (e sovrascrive alcuni built-in di quelli troppo) per parlare di applicazioni web

  • ANT, Makefile sintassi etc.sono, inoltre, Dsl, ma hanno una loro sintassi.Questo è ciò che io chiamo DSL.

Un aspetto importante di questo hype:Ha senso pensare di applicazione in termini di una lingua.Di cosa vuoi parlare nel tuo app?Questi dovrebbero quindi essere le classi e metodi:

  1. Definire una "lingua" (una sintassi come proposto da altri su questa pagina o una gerarchia di classi per la vostra lingua preferita) che è capace di esprimere il vostro problema.
  2. Per risolvere il tuo problema in termini di linguaggio.

DSL è fondamentalmente creare il proprio piccolo linguaggio speciale per risolvere un dominio specifico problema.Questo è stato risolto utilizzando il metodo di concatenamento.Lingue in cui i punti e le parentesi sono opzionali contribuire a rendere queste espressioni sembrano più naturali.Può anche essere simile a un generatore di pattern.DSL non sono le lingue loro, ma piuttosto un modello che si applica per le API per effettuare chiamate a essere più evidente.

Un esempio è Guice, Guice Guida per gli Utenti http://docs.google.com/View?docid=dd2fhx4z_5df5hw8 ha qualche descrizione più in basso di come le interfacce sono tenuti ad implementazioni, e in quali contesti.

Un altro esempio comune è per i linguaggi di query.Per esempio:

NewsDAO.writtenBy("someUser").before("someDate").updateStatus("Deleted")

In attuazione, immaginare ogni metodo di restituzione di un nuovo oggetto Query, o solo di questo aggiornamento internamente.In qualsiasi momento è possibile terminare la catena utilizzando ad esempio le righe() per ottenere tutte le righe, o updateSomeField come ho fatto io qui sopra.Sia restituisce un oggetto.

Vi consiglio di prendere un'occhiata a il Guice esempio di cui sopra, come di ogni chiamata, ci restituisce un nuovo tipo con nuove opzioni su di loro.Un buon IDE, sarà possibile completare, rendendo chiaro che le opzioni che si hanno in ogni punto.

Edit:sembra che molti considerano Dsl, come nuovo, semplice, unico scopo lingue con un proprio parser.Ho sempre associato DSL utilizzando come metodo di concatenamento una convenzione per esprimere le operazioni.

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