Frage

Lesen Sie einfach den (deutschen) Wiki-Artikel über modellgetriebene SW-Entwicklung (MDSD).Zusammenfassung der Wiki-Definition:

  • Bei MDSD geht es um das DRY-Prinzip (Wiederholen Sie sich nicht)
  • Bei MDSD geht es um das Design von DSLs (domänenspezifischen Sprachen) und Generatoren
  • Eine präzisere Beschreibung von Problemen (durch die höhere Abstraktionsebene der jeweiligen DSLs) ist durch MDSD möglich.

    Da ich funktionale Programmierung höherer Ordnung kenne und verwende, frage ich mich, und meine eigentliche Frage lautet: Ist MDSD nichts anderes als ein verzweifelter Versuch, (einen Teil) der leistungsstarken Funktionen funktionaler Programmierung höherer Ordnung in Programmiersprachen / -paradigmen einzufügen, denen diese Funktionen von Natur aus fehlen?

    (Oder habe ich falsch verstanden und könnte MDSD sogar verwendet werden, um funktionale Programmierung höherer Ordnung wesentlich zu unterstützen?)

War es hilfreich?

Lösung

Ich sehe es lieber anders herum. OOP, MDSD, TDD, domänengesteuertes Design und die vielen anderen Paradigmen da draußen sind genau das ... Paradigmen. Sie sind eine Sichtweise auf die Aufgabe der Softwareentwicklung, die Menschen entwickelt haben, um Dinge anzugehen, von denen sie glaubten, dass sie in dem, was vor ihnen lag, fehlen. Es stellt sich heraus, dass die funktionale Programmierung dasselbe tut - sie gibt dem Programmierer Abstraktionsfähigkeiten, die in Sprachen ohne erstklassige Funktionen nicht elegant sind. Daher würde ich nicht sagen, dass MDSD ein verzweifelter Versuch ist, nicht funktionierenden Sprachen funktionale Merkmale zu verleihen, genauso wie ich sagen würde, dass Menschen aus einer anderen Perspektive auf dasselbe Problem stoßen.

Einige der Antworten auf diese aktuelle SO-Frage haben eine andere Art, es auszudrücken . ShreevatsaR sagt: "Fast alles, was Sie mit Makros tun können, können Sie mit einer Funktion höherer Ordnung tun." Matthias Benkard sagt: "Das Fehlen von Makros wird durch ausgefeiltere ... Konzepte wie Monaden und Pfeile etwas gemildert." Andere Kommentare wiederholen das gleiche Thema. Sie erwähnen, dass einer der Grundsätze von MDSD Generatoren sind. Makros sind Generatoren zur Kompilierungszeit. Daher würde ich ihre Aussagen als Argument übersetzen, dass MDSD in funktionalen Sprachen von Natur aus einfach ist.

Andere Tipps

Es gibt einen großen Unterschied zwischen der Erstellung einer DSL (Domain Specific Language) (FP) und der Erstellung einer ganzen Reihe von Domain Objects (OOP) (mit darin enthaltener Geschäftslogik) die Objekte).

FP kann das gleiche Problem (und die gleichen Vorteile) haben wie prozedurale Sprachen: Trennung von Verhalten und Daten . OOP-Sprachen raten davon ab. Diese Trennung wird als Anemic Domain Model bezeichnet.

Diese "Trennung" kann das Ändern Ihrer Daten sehr schwierig machen (und mit DSL vielleicht sogar noch schlimmer). Siehe meinen Beitrag: Umgang mit inkrementellen Datenmodellierungsänderungen in der Funktionsprogrammierung

Auf der anderen Seite sind jedoch Verhaltensänderungen und staatenlose Dinge auf der ganzen Linie mit dem OOP Domain Driven-Design ein Problem. Bei Dingen wie AOP ITDs und Meta-Programmierung wird dies jedoch weniger problematisch.

Scala und Ruby sind ein schönes Beispiel für eine Mischung beider Techniken.

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