Gibt es Architekturgerüche?

37

Es gibt Unmengen von Ressourcen im Web, die auf Code-Gerüche verweisen und diese auflisten. Ich habe jedoch noch nie Informationen über architektonische Gerüche gesehen . Ist das irgendwo definiert und gibt es eine Liste? Wurden formelle Untersuchungen zu Architekturfehlern und deren Auswirkungen auf die Projektgeschwindigkeit, Fehler und dergleichen durchgeführt?

Bearbeiten: Ich habe nicht wirklich nach einer Liste in den Antworten gesucht, sondern nach einer Dokumentation (im Internet oder in einem Buch) über Architekturgerüche.

Kreuz
quelle
4
Nur wenn der Architekt schlechte persönliche Hygienegewohnheiten hat ...
FrustratedWithFormsDesigner
Ich wollte wirklich nicht, dass ihr die Gerüche hier auflistet. Vielleicht auf eine Liste verlinken?
C. Ross
Ross Entschuldigung, das habe ich nicht gemerkt. Ich habe nur ein paar Erfahrungen hinzugefügt.
Amir Rezaei
@Amir Rezaei dein ist das Beste von allem, zumindest hast du deine Liste in einem Beitrag zusammengefasst.
C. Ross

Antworten:

33
  • Multitier-Architektur Wenn Sie Ebenen auf Ebenen auf Ebenen auf Ebenen haben ... sehen Sie meinen Punkt hier in Ihrer Anwendung. Ich nenne es Over Layered Architecture
  • Über Abstraktion so, dass man sich im Code verliert.
  • Futuristische Architektur Dies geschieht, wenn die Lösung zu futuristisch ist. In Wirklichkeit kann niemand neue Anforderungen vorhersagen. Daher ist der größte Teil der futuristischen Implementierung reine Zeit- und Ressourcenverschwendung.
  • Technikbegeisterte Architektur Der Architekt mochte die neue Technik und nahm die Produktion auf. Ohne zu wissen, ob es vorher bewiesen wurde.
  • Over Kill Architecture Ein einfaches Problem wurde durch den exponentiellen Faktor der Architekturfähigkeiten und -technologien gelöst.
  • Cloud-Architektur Ich nenne es Cloud-Architektur, da Architektur keine Verbindung zum Wirklichen hat. Es sind nur ein paar nette Visio-Diagramme.

Das völlige Fehlen des Gegenteils ist auch wahr.

Hier ist der Link der zehn häufigsten Fehler in der Softwarearchitektur .

Amir Rezaei
quelle
1
Ich bin damit einverstanden, ich habe gesehen, absurd geschichteten Anwendung (bis zu 9 Schichten)
7
Baklava-Architektur?
Andrew Arnold
15
Ah, die enge
Beziehung
6
Ooh @GSto - Spaghetti-Code in der Lasagne-Architektur. Das gesamte Ensemble könnte als "kleines Italien" bezeichnet werden.
Glenatron
2
An einigen Stellen ist application_layers == (developers_assigned - 1), weil jemand der PM ist.
sal
20

Alles ist konfigurierbar . Wenn ein Architekt Ihnen mitteilt, dass sein System aufgrund seiner umfassenden Konfigurierbarkeit veränderungssicher oder in hohem Maße anpassbar ist, ist dies ein Architekturgeruch.

Das Problem ist, dass Sie wirklich nur Konfigurationsmechanismen bereitstellen können, die Ihrer Meinung nach konfiguriert werden müssen. Sobald Ihre Anwendung jedoch in Betrieb ist, ist dies nicht mehr ausreichend. Dann erweitern sich die Konfigurationsmechanismen und schließlich erhalten Sie den Inner Platform Effect.

Und dann bist du in der Software-Hölle.

Adam Crossland
quelle
Interessant ist jedoch, dass der innere Plattformeffekt höllisch ist und dennoch viele Leute die DSL-orientierte Entwicklung als Next Big Thing betrachten, das meiner Meinung nach von Haus aus etwas innerplattformartig ist.
Glenatron
@glenatron: Vielleicht ist das der Punkt? Warum nicht einfach das Handtuch werfen und davon ausgehen, dass es passieren wird? Dann können Sie mit Ihrem DSL entwickeln und die Implementierung ändern, um mehr Konfiguration zu bewältigen.
Jeremy Heiler
Ich würde sagen, DSL ist wie DSL. Das sind gute und schlechte Wege umzusetzen. Wenn ich darüber nachdenke, wie es richtig gemacht werden kann, denke ich an die vielen DSLs, aus denen Ruby on Rails besteht. Sie implementieren keine eigene Sprache - sie sind nur Konstrukte in einem Ruby-Programm, aber sie abstrahieren geschickt und hilfreich viele Details dessen, wofür sie eine Sprache sind. Die IPE beginnt wirklich zu stinken, wenn Sie von einer domänenspezifischen Sprache zu einer zunehmend verallgemeinerten Sprache wechseln, die der Sprache, in der sie implementiert ist, sehr ähnlich sieht.
Adam Crossland
Ich habe kürzlich über DSLs gelesen, Jetbrains haben ihre MPS, die interessant aussehen, aber ich kann mir noch nicht vorstellen, sie zu verwenden. Sie behaupten, es auf einigen ihrer Produkte zu verwenden, also könnte ich nachfragen, welche und wie.
Ian
Ich würde das 100.000.000 Mal verbessern, wenn ich könnte. Wenn Sie jemals das Projektmanagement-Tool namens Clarity verwendet haben, werden Sie verstehen, warum dies eine schreckliche Wahl für eine Architektur ist!
HLGEM
9

Eine von einem ORM gestaltete Datenbank! Oder ein nicht relationales Datenbank-Backend, das relational sein sollte. Oder eine Datenbank, in der Sie Ansichten verwenden, die Ansichten aufrufen, die nicht nur Ansichten aufrufen, sondern auch zu langsam sind (Datenbanken müssen von Anfang an für die Leistung ausgelegt sein) (Eine Überabstraktion, wie @AmirResaei sagte, macht es leicht, sich im Code zu verirren, wenn Sie etwas reparieren müssen, das sich am Ende all dieser Ebenen befindet.)

HLGEM
quelle
Das ist tot auf. Leider wird es ein größeres Problem, wenn die Hardware schneller wird. Bei 10 Datensätzen funktioniert es schnell. Warum sollte es bei 100.000.000 nicht funktionieren?
Jeff Davis
4
ORM ist für mich Architekturgeruch.
Christopher Mahan
3

Codegerüche und Architekturgerüche sind ein und dasselbe. Code fängt an zu "riechen", weil die Architektur nicht optimal ist.

In Martin Fowlers wegweisendem Buch zum Thema Refactoring stellt er eine Reihe von Code Smells vor und zeigt auf, wie Sie sie aus Ihrem System refactoring können. Joshua Kerievskys Refactoring to Patterns hebt diese Idee weiter hervor, indem er spezifische Architekturmuster angibt , um verschiedene Code-Gerüche zu reparieren (und wie man sie Schritt für Schritt refactoring kann ).

Das meiste Refactoring wird durchgeführt, um suboptimalen Code durch eine verbesserte Architektur zu verringern. Man könnte argumentieren, dass der einzige von Natur aus geborene "architektonische Geruch" (außer Big Ball of Mud) die BDUF-Architektur (Big Design Up Front) ist. Wo Sie versuchen, alles unterzubringen, was Sie brauchen, bevor die erste Codezeile geschrieben wird. Bei einem agilen Softwareprojekt, bei dem das Design nach Bedarf ausgeführt wird (selbst wenn Code als Design behandelt wird ), wird die Architektur organisch wachsen.

Michael Brown
quelle
1
Interessanter Punkt, können Sie ein Beispiel geben?
Travis Christian
Clevere Codierung ist Codegeruch.
Christopher Mahan
Eine Antwort, die eine Aussage macht, ohne Fakten zu stützen. Geruch beantworten?
Evan Plaice
@EvanPlaice Ich entschuldige mich. Hoffentlich bietet meine Bearbeitung einen Einblick, wie ich zu meiner Antwort gekommen bin.
Michael Brown
@ MikeBrown +1 Ich war scherzhaft, aber nette Verbesserung.
Evan Plaice
2

(Viele) Kopplungen - in welcher Form auch immer - lassen Architekturen riechen. Je mehr es gekoppelt ist, desto mehr riecht es.

Das heißt, überhaupt keine Kopplung riecht oft nach Leistungsproblemen.

Klaim
quelle
1
Dem muss ich nicht zustimmen. Wenn Sie über Geschäftsanwendungen sprechen, ist die Kopplung an eine Datenbank, deren Änderung höchstwahrscheinlich unwahrscheinlich ist, nicht dumm. Sie können das datenbankspezifischere Leistungsmerkmal verwenden.
HLGEM
+1 aber YMMV. Mit Vorsicht verwenden.
Michael K
1
Deshalb habe ich hinzugefügt "überhaupt keine Kopplung riecht oft Leistungsprobleme". Ich bin damit einverstanden, dass Sie eine Kopplung verwenden müssen, um die Leistung zu verbessern. Wenn es überall eine große Kopplung gibt (zwischen den verschiedenen Modulen / Klassen / in welcher Anwendung auch immer), gibt es ein Architekturproblem.
Klaim 18.02.11
2

Hier ist ein konkreter Architektur- / Designgeruch, dem ich ständig begegne: Analyse und Berichterstellung direkt aus einer Transaktionsdatenbank.

Dies ist in einigen Situationen (z. B. bei Light-Berichten) sicherlich in Ordnung, aber in vielen Fällen bestehen Konflikte zwischen den Anforderungen an die Berichterstellung und die Transaktionsverarbeitung. Da dies jedoch einfach und kostengünstig ist, werden Berichte direkt von der Transaktionsdatenbank ausgeführt. Dies verursacht auf beiden Seiten der Gleichung alle möglichen Kopfschmerzen.

Dies ist in der Regel in Enterprise LOB-Apps zu sehen, übrigens. Ich verstehe, dass viele SMBs einfach nicht über die Ressourcen oder das Know-how verfügen, um Warehouses und Datamarts zu erstellen (Cubes oder kartenreduzierte Setups vergessen), aber viele größere Organisationen, mit denen ich zusammengearbeitet habe, haben dieselben Probleme.

Beim Entwerfen eines Systems sollte der Architekt unbedingt berücksichtigen, dass Berichterstellung - insbesondere Analyseberichte - und Transaktionsanforderungen am besten als separate Probleme behandelt werden und nicht nur auf Datenbankebene zusammengefasst werden.

Curtis Batt
quelle
0

Ich bin nicht sicher, ob dies zu Recht auf die Architekturebene passt, aber wenn ich eine Reihe von Manager-Klassen / Modulen in einem vermeintlichen OO-Design sehe, ist dies eine Garantie dafür, dass die einzige Person, die die Architektur / das Design versteht ist der Architekt / Designer selbst ohne viel Erklärung / Lernen durch andere.

Dunk
quelle
0

Es gibt viele Architekturgerüche, die von der Community dokumentiert werden. Eine häufig vorkommende Menge ist die folgende.

  • Zyklische Abhängigkeit: Dieser Geruch entsteht, wenn zwei oder mehr Architekturkomponenten direkt oder indirekt voneinander abhängen.
  • Instabile Abhängigkeit: Dieser Geruch tritt auf, wenn eine Komponente von anderen Komponenten abhängt, die weniger stabil als sie selbst sind.
  • God-Komponente: Dieser Geruch tritt auf, wenn eine Komponente entweder in Bezug auf das LOC oder die Anzahl der Klassen übermäßig groß ist.
  • Merkmalskonzentration: Dieser Geruch tritt auf, wenn eine Komponente mehr als ein architektonisches Anliegen / Merkmal erkennt.
  • Streufunktionalität: Dieser Geruch tritt auf, wenn mehrere Komponenten für die Realisierung des gleichen Problems auf hoher Ebene verantwortlich sind.
  • Dichte Struktur: Dieser Geruch tritt auf, wenn Komponenten übermäßige und dichte Abhängigkeiten aufweisen, ohne dass eine bestimmte Struktur vorliegt.

Ich habe kürzlich eine Taxonomie der Gerüche erstellt . Derzeit werden 38 Architekturgerüche und mehr als 260 Code-Gerüche dokumentiert.

Tushar
quelle