Während ich mich über Softwarearchitektur und Designmuster informierte, bemerkte ich, dass in den meisten Fällen einige Sprachmerkmale und Designspezifikationen in der Erklärung enthalten sind.
Praktisch jeder Artikel oder jedes Buch darüber wird die Ideen anhand von Klassen und Schnittstellen veranschaulichen. Alles, was man zu diesem Thema leicht finden kann, würde Objekte und OOP-Konzepte erwähnen.
Was ist, wenn die Sprache, in der das System geschrieben ist, solche Konzepte überhaupt nicht hat? Was ist beispielsweise, wenn ich Python oder Node verwende, die dynamisch eingegeben wurden und keine Vorstellung von der Benutzeroberfläche haben? Was ist, wenn ich TypeScript verwende, bei dem eine Schnittstelle ein kurzlebiges Konstrukt ist, das zur Laufzeit nicht vorhanden ist? Was ist, wenn ich mich für funktionale Programmierung interessiere? Soll ich zB SOLID ignorieren und nach anderen Konzepten suchen, die für meine Sprache geeignet sind?
Wenn ja, welche? Leider beziehen sich alle gut angenommenen Paradigmen (soweit mir bekannt ist) in irgendeiner Weise auf OOP-Konzepte und -Typen. Wenn nein, nach welchen Regeln sollte ich die allgemeine Architektur und die Gestaltungsprinzipien an meine Sprache und meinen Anwendungsfall anpassen?
Wie würden Sie allgemein die Abhängigkeit zwischen Architektur und Sprache beschreiben?
quelle
Antworten:
Eine Softwarearchitektur ist der Architektur eines Hauses oder einer Brücke sehr ähnlich. Eine Brücke muss das Gewicht von sich selbst und den Fahrzeugen, die darüber fahren, oder den Menschen, die darüber laufen, tragen. Es muss dem Wetter standhalten. Die Materialien, die Sie verwenden, um es zu bauen, müssen stark und relativ leicht sein.
Es gibt viele Materialien, mit denen Sie ein Haus bauen können. Sie können Ziegel oder Stuck verwenden. Sie können Holzbalken oder Metallbalken verwenden. Jedes Material hat seine eigenen Eigenschaften in Bezug auf Gewicht, Festigkeit und so weiter. Alle diese Eigenschaften wirken sich auf die Architektur aus.
Ebenso wirkt sich die von Ihnen verwendete Programmiersprache auf die Art und Weise aus, wie Sie Ihre Architektur erstellen. Ihre Architektur wird in einer Programmiersprache mit Klassen wie C ++ anders aussehen als in einer Programmiersprache ohne wie C.
Die SOLID-Prinzipien beziehen sich hauptsächlich auf objektorientierte Sprachen (dh Sprachen mit Klassen).
quelle
Architektur hängt von Fähigkeiten ab, um ihre Ziele zu erreichen. Sprachauswahl kann Fähigkeiten einschränken. Jede Turing Complete-Sprache kann jede Programmieraufgabe ausführen. Danach geht es darum, wie gut lesbar die Sprache die Lösung sein lässt.
Bei vielen Softwarearchitekturschemata werden Sie aufgefordert, das gesamte Wissen über die Auswahl von Technologien aus den Geschäftsregeln der Kerndomäne zu entfernen. Die einzige technische Wahl, die Sie niemals aus dem Kern entfernen können, ist die Sprache, in der Sie sie ausdrücken möchten.
Wenn sich Bücher über Architektur daran halten, Sie über ihre Ziele zu informieren, spielt die Sprache keine Rolle, solange sie in der Lage ist, das Ziel zu erreichen. Wenn Sie in den Büchern erfahren, wie Sie diese Ziele erreichen, beginnt die Sprache zu Mater.
quelle
Architektur als Begriff hat eine ganz bestimmte Bedeutung, die in engem Zusammenhang mit der Architektur in der physischen Welt steht. Im Kern geht es um die Kunst und Praxis des Bauens, darum, wie Dinge hergestellt und zusammengesetzt werden. So gesehen, wenn Architektur gut gemacht ist, ist die Sprache meiner Meinung nach sehr eng mit der Architektur verbunden, so wie ein gut gebautes Gebäude durch das Material, aus dem es besteht, genauestens informiert werden sollte.
In der Software sollten die architektonischen Entscheidungen so getroffen werden, dass sie mit den Eigenschaften der Sprache übereinstimmen. Wenn Sie ein System mit einer objektorientierten Sprache erstellen, würde ich erwarten, dass die Architektur des Systems auch objektorientiert ist. Wenn Sie ein System mit einer funktionalen Sprache erstellen, würde ich erwarten, dass die Architektur dieses Systems auch funktionsfähig ist.
Sinn ergeben?
quelle
Zunächst einmal würde ich sagen, dass selbst die Sprache, in der Sie denken, einen tiefen Einfluss auf das hat, was Sie sich vorstellen können. Es gibt einen Grund, warum PASCAL von Niklaus Wirth und C von Brian Kernighan und Dennis Ritchie erstellt wurde.
Auf einer höheren Ebene wird die Fähigkeit, bestimmte Konzepte auszudrücken (und das Fehlen anderer), Ihre Gedanken lenken und Sie zu bestimmten Lösungen führen, die nicht notwendigerweise dieselbe andere Person mit einem anderen Hintergrund wären.
Schließlich können die von Ihnen erwähnten Konzepte alle in einer beliebigen Allzwecksprache implementiert werden. Es ist nur so, dass sie möglicherweise keine syntaktische Unterstützung haben und die Implementierung möglicherweise umständlich ist. Sie können objektorientierten x86-Assemblycode schreiben, wenn Sie genau wie bei C ausreichend festgeschrieben (oder verrückt genug) sind. Tatsächlich waren die ersten Implementierungen von C ++ Präprozessoren, die Ihren C ++ - Code in C kompilierten (und die beschädigten Symbolnamen erstellten) viel mehr Spaß beim Debuggen).
quelle