Gibt es bestimmte Workflows oder Entwurfsmuster, die häufig zum Erstellen großer funktionaler Programmieranwendungen verwendet werden? [geschlossen]

13

Ich habe Clojure jetzt für eine Weile erforscht, obwohl ich es für keine nicht trivialen Projekte verwendet habe. Grundsätzlich habe ich mich gerade mit der Syntax und einigen Redewendungen vertraut gemacht. Da Clojure die erste funktionale Sprache ist, mit der ich mich intensiv befasst habe, bin ich natürlich nicht so vertraut mit der funktionalen Art, Dinge zu tun.

Gibt es jedoch bestimmte Workflows oder Entwurfsmuster, die bei der Erstellung großer funktionaler Anwendungen häufig vorkommen? Ich würde gerne anfangen, funktionale Programmierung "real" zu nutzen, aber ich befürchte, dass dies bei meinem derzeitigen Mangel an Fachwissen zu einem epischen Misserfolg führen würde.

Die "Gang of Four" ist ein solcher Standard für OO-Programmierer, aber gibt es etwas Ähnliches, das sich mehr auf das Funktionsparadigma bezieht? Die meisten Ressourcen, die ich gefunden habe, haben großartige Programmiernuggets, aber sie treten nicht zurück, um ein breiteres, architektonischeres Erscheinungsbild zu erzielen.

Andrew
quelle
6
Einige der GOF-Muster sind wirklich nur Problemumgehungen in OO-Sprachen für Dinge, die Functional Programming bereits bietet. Siehe stackoverflow.com/q/327955
Robert Harvey
2
Related: stackoverflow.com/q/89212
Schlepper
Ich denke, in dieser Diskussion wird ein bisschen zu viel Wert auf GoF / OOP-spezifische Muster gelegt. Kann irgendjemand ein paar spezifische Muster für funktionale Programmierung posten (die nicht nur versuchen, die Trivialität von GoF in funktionalen Sprachen zu beweisen)?
Daniel B

Antworten:

3

Muster dieser Art sind normalerweise Symptome eines gebrochenen, nicht geeigneten zugrunde liegenden Modells.

OOP ist vom Design her defekt, für die meisten seiner Anwendungen ungeeignet, daher platzt es vor all den sogenannten "Mustern". Das Funktionsmodell ist (nur ein bisschen) flexibler, und der Bedarf an "Mustern" ist dort nicht so offensichtlich.

Sobald Sie einen (für die funktionalen Programmierer natürlichen) sprachorientierten Ansatz anwenden und DSLs für jede bestimmte Problemdomäne verwenden oder erstellen, werden Sie feststellen, dass überhaupt keine Muster angezeigt werden, da Sie immer ein geeignetes Modell für verwenden ein Problem beschreiben.

Natürlich sind einige wiederkehrende "Muster" oder "Rezepte" auf hoher Ebene unvermeidlich, selbst in der sehr abstrakten, sauberen und reinen Mathematik, aber sie sind von einer anderen Art und von einer anderen Abstraktionsstufe als die GoF-Muster. Sie finden zum Beispiel Monaden nützlich.

SK-Logik
quelle
+1 für die letzten 2 Absätze, ich denke, das ist genau richtig. In Bezug auf OOP bin ich neugierig auf die Gründe, die dahinter stecken, es als kaputt zu bezeichnen, abgesehen von der Tatsache, dass es sich um ein allgemeines Tool handelt, das häufig auf bestimmte Probleme angewendet wird (daher gibt es Muster auf niedriger Ebene wie die GoF-Muster, die entstehen). Können Sie das kurz erläutern oder einen Link posten, der Ihre Meinung zusammenfasst?
Daniel B
@DanielB, an OOP selbst ist nichts auszusetzen, aber die Art und Weise, wie es normalerweise angewendet wird, ist völlig kaputt. Dieses Modell passt nur zu einigen Problemen der realen Welt (und es scheint wirklich, wenn es richtig angewendet wird), aber für den Rest braucht es alle Krücken und Klebeband, um zu passen. Siehe meine Antwort unter programmers.stackexchange.com/questions/52608/… zum Beispiel.
SK-logic
OK, ich denke ich bin auf der gleichen Seite. Tatsächlich habe ich vielleicht schon einmal genau diese Frage gestellt. Tut mir leid - die Art und Weise, wie Sie diese Zeile formuliert haben, scheint nur so, als würden Sie mehr implizieren.
Daniel B
-3

Designmuster sind meiner Meinung nach semantisch. Ich erinnere mich, dass ich einige meiner alten Apps mit MVC umgeschrieben habe, um sicherzustellen, dass ich das Muster so gut verstand, wie ich dachte. Aber am Ende habe ich nichts von MVC über meinen ursprünglichen Code gewonnen.

Wenn ich jedoch meinen ursprünglichen Code auf eine größere Entwicklungsumgebung anwenden und jemandem mitteilen würde, dass es ein Problem mit dieser bestimmten Methode gibt ... wäre es für diesen Entwickler schwierig, das Problem zu finden. Wenn ich jedoch sage, dass der ContractController aus irgendeinem Grund durcheinander geraten ist, würde er genau wissen, wo er anfangen soll.

Designmuster sind großartig ... aber wie gesagt, ich denke, sie sind semantisch!

EDIT: Sie Evangelisten Typen verrückt mich. Wie konnte etwas ohne MVC (oder ein anderes Designmuster) entwickelt werden?

aserwin
quelle
2
semantic (sɪˈmæntɪk) - adj 1. von oder in Bezug auf Bedeutung oder aus Unterscheidungen zwischen den Bedeutungen verschiedener Wörter oder Symbole 2. von oder in Bezug auf Semantik (das Studium der Bedeutung) 3. Logik in Bezug auf die Interpretation einer formalen Theorie, als wenn Wahrheitstabellen als ein Bericht über die sententialen Verbindungen gegeben werden
Robert Harvey
+1 - Mein Punkt war, dass Designmuster einfach ein Kommunikationsmittel sind!
Aserwin
Entwurfsmuster sind mehr als nur eine Möglichkeit zur Kommunikation. Es handelt sich um konkrete, gut verstandene Rezepte, die in Software implementiert werden können, um bestimmte, häufig auftretende Probleme zu lösen.
Robert Harvey
Das sagen die Bücher. Aber ich habe nie ein Problem durch ein Entwurfsmuster gelöst, das ich ohne es nicht lösen könnte. Der einzige Vorteil, den ich in meiner eigenen Erfahrung bemerkt habe, ist die Fähigkeit, über den Code miteinander zu sprechen! ;)
Aserwin
1
In Bezug auf Ihre Bearbeitung: Sie möchten das Rad also lieber jedes Mal neu erfinden, wenn Sie ein neues Stück Code schreiben?
Robert Harvey