Frage

Ich höre immer mehr davon, dass domänenspezifische Sprachen im Umlauf sind und wie sie die Art und Weise verändern, wie Sie mit Geschäftslogik umgehen, und ich habe es gesehen Ayendes Blogbeiträge und so weiter, aber ich habe nie wirklich verstanden, warum ich meine Geschäftslogik von den Methoden und Situationen abkoppeln sollte, die ich bei meinem Anbieter verwende.

Wenn Sie Erfahrung mit diesen Dingen haben, könnten Sie es vielleicht in echte Laienbegriffe bringen:

  • Was genau bedeutet der Aufbau von DSLs?
  • Welche Sprachen verwenden Sie?
  • Wo ist der Einsatz von DSL sinnvoll?
  • Welchen Vorteil bietet die Nutzung von DSLs?
War es hilfreich?

Lösung

DSLs eignen sich gut für Situationen, in denen Sie einen Teil der Systemkontrolle an jemand anderen übergeben müssen.Ich habe sie in Rules Engines verwendet, wo Sie eine einfache Sprache erstellen, mit der sich weniger technisch versierte Leute leichter ausdrücken können – insbesondere in Arbeitsabläufen.

Mit anderen Worten, anstatt sie Java lernen zu lassen:

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

Ich kann eine DSL schreiben, die mich sagen lässt:

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

Es gibt andere Situationen, aber im Grunde genommen sind das alles Kandidaten für DSLs, wenn Sie eine Makrosprache verwenden, einen Workflow skripten oder eine nachträgliche Anpassung zulassen möchten.

Andere Tipps

DSL steht für Domänenspezifische Sprache d.h.Sprache, die speziell für die Lösung von Problemen in einem bestimmten Bereich entwickelt wurde.
Beispielsweise kann Markdown (Markup-Sprache zum Bearbeiten von Beiträgen auf SO) als DSL betrachtet werden.

Persönlich finde ich in fast jedem großen Projekt, an dem ich arbeite, einen Platz für DSL.Am häufigsten benötige ich eine Art SQL-ähnliche Abfragesprache.Eine weitere häufige Verwendung sind regelbasierte Systeme. Sie benötigen eine Sprache, um Regeln/Bedingungen festzulegen.

DSL ist in einem Kontext sinnvoll, in dem es schwierig ist, Probleme mit herkömmlichen Mitteln zu beschreiben/zu lösen.

Wenn Sie Microsoft Visual Studio verwenden, verwenden Sie bereits mehrere DSLs – die Designoberfläche für Webformulare, Winforms usw.ist ein DSL.Der Klassendesigner ist ein weiteres Beispiel.

Ein DSL ist lediglich eine Reihe von Tools, die (zumindest theoretisch) die Entwicklung in einer bestimmten „Domäne“ (d. h.visuelles Layout) einfacher, intuitiver und produktiver.

Was den Aufbau einer DSL betrifft, beziehen sich einige der Dinge, über die Leute wie Ayende geschrieben haben, auf das „Textparsen“ von DSLs, bei denen Entwickler (oder Endbenutzer) „natürlichen Text“ in eine Anwendung eingeben können, die den Text analysiert und eine Art generiert von Code oder darauf basierender Ausgabe.

Sie können jede beliebige Sprache verwenden, um Ihr eigenes DSL zu erstellen.Microsoft Visual Studio verfügt über viele Erweiterungspunkte sowie Muster und Vorgehensweisen „Guidance Automation Toolkit“ Und Visual Studio SDK kann Sie beim Hinzufügen von DSL-Funktionalität zu Visual Studio unterstützen.

DSL sind grundlegende Compiler für benutzerdefinierte Sprachen.Ein gutes „kostenloses und offenes“ Tool zum Entwickeln ist unter verfügbar ANTLR.Vor kurzem habe ich mir dieses DSL für eine Weile angesehen Zustandsmaschinensprache Verwendung für ein neues Projekt.Ich stimme mit Tim Howland überein, dass sie eine gute Möglichkeit sein können, jemand anderem die Möglichkeit zu geben, Ihre Anwendung anzupassen.

Zu Ihrer Information: Ein Buch über DSLs ist als Teil der Signature-Reihe von Martin Fowler in Vorbereitung.

Wenn es den gleichen Standard hat wie die anderen Bücher der Reihe, sollte es eine gute Lektüre sein.

Mehr Informationen Hier

DSL ist nur ein schicker Name und kann verschiedene Bedeutungen haben:

  • Rails (das Ruby-Ding) wird manchmal als DSL bezeichnet, weil es spezielle Methoden für Webanwendungen hinzufügt (und auch einige integrierte überschreibt).

  • ANT, Makefile-Syntax usw.sind ebenfalls DSLs, haben aber ihre eigene Syntax.Das würde ich als DSL bezeichnen.

Ein wichtiger Aspekt dieses Hypes:Es ist durchaus sinnvoll, Ihre Bewerbung in Bezug auf eine Sprache zu betrachten.Worüber möchten Sie in Ihrer App sprechen?Das sollten dann Ihre Klassen und Methoden sein:

  1. Definieren Sie eine „Sprache“ (entweder eine echte Syntax, wie von anderen auf dieser Seite vorgeschlagen, oder eine Klassenhierarchie für Ihre Lieblingssprache), die Ihr Problem ausdrücken kann.
  2. Lösen Sie Ihr Problem in Bezug auf diese Sprache.

DSL erstellt im Grunde eine eigene kleine Subsprache, um ein bestimmtes Domänenproblem zu lösen.Dies wird durch Methodenverkettung gelöst.Sprachen, in denen Punkte und Klammern optional sind, tragen dazu bei, dass diese Ausdrücke natürlicher wirken.Es kann auch einem Builder-Muster ähneln.DSL sind selbst keine Sprachen, sondern ein Muster, das Sie auf Ihre API anwenden, um die Aufrufe selbsterklärender zu machen.

Ein Beispiel ist Guice, Guice-Benutzerhandbuch http://docs.google.com/View?docid=dd2fhx4z_5df5hw8 Weiter unten finden Sie eine Beschreibung, wie und in welchen Kontexten Schnittstellen an Implementierungen gebunden werden.

Ein weiteres häufiges Beispiel sind Abfragesprachen.Zum Beispiel:

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

Stellen Sie sich bei der Implementierung vor, dass jede Methode entweder ein neues Abfrageobjekt zurückgibt oder sich nur intern aktualisiert.Sie können die Kette jederzeit beenden, indem Sie beispielsweise rows() verwenden, um alle Zeilen abzurufen, oder updateSomeField, wie ich es oben hier getan habe.Beide geben ein Ergebnisobjekt zurück.

Ich würde empfehlen, auch einen Blick auf das obige Guice-Beispiel zu werfen, da jeder Aufruf dort einen neuen Typ mit neuen Optionen zurückgibt.Eine gute IDE ermöglicht Ihnen den Abschluss und macht deutlich, welche Optionen Sie an jedem Punkt haben.

Bearbeiten:Offenbar betrachten viele DSLs als neue, einfache Sprachen mit einem einzigen Zweck und eigenen Parsern.Ich assoziiere DSL immer mit der Verwendung von Methodenverkettung als Konvention zum Ausdrücken von Operationen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top