Inwiefern hängt die Softwarearchitektur von der Sprache ab?

14

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?

Tristan Tzara
quelle
Ich schrieb einen Artikel über Softwarearchitektur: Verwalten der Softwarekomplexität linkedin.com/pulse/…
overexchange
Erstens, ja, die Softwarearchitektur basiert auf der Technologie, die Sie sich vorgestellt haben. Beispiel: Python nutzt Multithreading erst dann, wenn diese Threads an E / A gebunden sind. Dies ist eine echte Einschränkung bei der Verwendung von Multi-Core-CPU-gebundenen Operationen. Zweitens sollten Sie dies anhören ... youtu.be/FF-tKLISfPE Drittens sollten Sie vorhandene stabile verteilte Unternehmensprodukte einer bestimmten Domäne analysieren / bearbeiten, die skalierbar bereitgestellt werden, und zwar für mindestens 5-6 Jahre. Dies ist ein organisches Verständnis dafür, wie Technologie das Design beeinflusst. Btw..Solche Produkte wurden in der Pre-Java-Welt von Grund auf neu geschrieben.
Überaustausch
Wrt-Technologie ... In der Java-Welt hatte das Sprachdesign bis zum 6. Juni 2007 die Kontrolle über die eigentlichen Gründer. Ab Java 8 würde ich Java als Propagandamaschine betrachten, aber nicht als Programmiersprache. Meiner Meinung nach ist Java zur Technologie eines Projektmanagers geworden. Als Anfänger würde ich also ein Produkt analysieren / bearbeiten, das mit C / C ++ / Python
overexchange
Bitte verwenden Sie in Ihrer Frage nicht das Wort Architektur, es ist verwirrend. Ihre Frage bezieht sich auf Design. Die Wahl der Sprache würde in der Regel als Architektur qualifizieren, Ihre Frage macht keinen Sinn, wie es formuliert wird ..
Martin Maat
Auch Python und Javascript tun haben Schnittstellen, sie einfach nicht über ein separates Stichwort verwenden , um sie zu abzugrenzen
Caleth

Antworten:

11

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).

Robert Harvey
quelle
4

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.

kandierte_orange
quelle
Gute Punkte in Ihrer Antwort, aber ich bin mir sicher, dass historisch gesehen die Softwarearchitektur mit den TECHNOLOGIEN im Trend umgesetzt wurde.
Überaustausch
@overexchange Der Sinn einer guten Architektur besteht darin, Software zu entwickeln, die den aktuellen Trend überdauert, indem sie für den nächsten bereit ist.
candied_orange
Zumindest in der Middleware-Welt waren Produktarchitekturen erst in den 90er Jahren in der Lage, über RPC / RMI / CORBA hinauszudenken. Ich sah klassische Designs, die auf prozedurorientierten Remore-Aufrufen beruhten. Dann änderte ServiceOArch den Architekturtrend der Middleware.
Überaustausch
2
@CandiedOrange das ist die Theorie. In der Praxis haben viele Leute etwas gesehen, was manchmal als "hype driven development" bezeichnet wird. Machen Sie einfach das, worüber ihr aktueller Peer-Kreis zur Zeit von Design am meisten spricht, damit Sie an diesem Vortrag teilnehmen können.
Marstato
@ Marstato Einverstanden. Das beste Beispiel ist, Spring / Springboot im aktuellen Trend für jedes neue Projekt zu verwenden, ohne zu wissen, warum.
Überaustausch
1

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?

RibaldEddie
quelle
Vielen Dank für Ihre Antwort! Sind Ihnen möglicherweise Ressourcen bekannt, die sich mit Softwarearchitekturen in Bezug auf dynamisch typisierte oder funktionale Sprachen befassen? tbh alles, was ich gesehen habe, funktioniert für z. B. Java, würde aber eine Anpassung für z. B. js erfordern. Welche Richtlinien sind möglich, um gängige Architekturmuster an eine schwach typisierte Sprache anzupassen? sollte man das überhaupt probieren oder sollte es etwas ganz anderes sein?
Tristan Tzara
Mein Anliegen war, dass es viele Best Practices und Muster für die Architektur gibt, wenn man z. B. Java verwendet, aber ich habe keine für Sprachen unterschiedlicher Art gesehen. also habe ich mich gefragt, wie ich diese behandeln soll
Tristan Tzara
Steht zB SOLID grundsätzlich noch in einem solchen Fall? wie passt man es an wenn ja? was soll man machen wenn nein
Tristan Tzara
Die SOLID-Prinzipien sind sehr objektorientiert. Ich denke jedoch, dass sie Prinzipien höherer Ordnung codieren, die für jedes Softwaresystem unabhängig von der Sprache anwendbar sind. Aber rudimentäre Prinzipien sind genau das: Sie sollten sie kennen und verstehen, bevor Sie weit über einen Vogelhäuschen hinausbauen.
RibaldEddie
@TristanTzara Die objektorientierte Programmierung wurde vor und ohne objektorientierte Sprache erfunden. Sie können dies in einer beliebigen allgemeinen Sprache tun. Sogar diejenigen, die keinen Unterricht haben.
kandierte_orange
1

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).

rbanffy
quelle