Ich höre nur den Podcast dieser Woche und denke, es wäre nett, einige von euch zu gruppieren Erfahrungen, bei denen Sie die "Architektur" -Seite des Designs gesehen haben, dominieren die Dinge ein wenig mehr als es sollte.
Java bekommt in dieser Hinsicht oft eine schlechte Presse und eine zunehmend schlechte Presse, wenn die wahrgenommene Komplexität von Java EE zunimmt. Meine Java-Erfahrung gegen die Zeit-Grafik-Nasen-Tauchgänge signifikant nach 2004, so fühle ich mich nicht qualifiziert zu kommentieren.
Meine letzte Erfahrung ist mit einem Architekten, der verzweifelt versucht, ein Objektmodell in einer Reihe von (relationalen) Datenbanktabellen korrekt darzustellen (zufällig ist es Oracle). Das Ergebnis ist ein Datenbankschema, das nicht effizient abfragbar ist, ohne zuvor eine Reihe von Tabellen (in materialisierten Ansichten) vorab verbunden zu haben.
Vor ein paar Jahren erschien eine wirklich gute Parabel in Joels Diskussionsgruppe zu diesem Thema. Die Geschichte heißt Warum ich Frameworks hasse .
Oh ja!
In meinem letzten Job, der an einem ziemlich großen Projekt arbeitete, hatten wir ein Architekturteam, das den gesamten Rahmen, den wir verwendeten, einrichtete. Sie entwarfen einen benutzerdefinierten ORM (ca. 2000, Hibernate war nicht so allgegenwärtig wie heute) und ein benutzerdefiniertes RCP-Framework basierend auf Swing.
Das ORM war nicht so schlimm. Sie waren nur zu sehr über zirkuläre Abhängigkeiten besorgt. In einigen Fällen hatten wir eine ziemlich schlechte Zeit, unser Domänenmodell auszudrücken, da das Unternehmen zirkuläre Abhängigkeiten benötigte (Geschäftsobjekte konnten beide Wege zwischen verschiedenen Verwaltungseinheiten durchlaufen).
Der Swing-Rahmen war die Hölle. Sie versuchten, ein Komponentenmodell zu implementieren, das etwas wie ein hierarchischer Controller aussah. Auf dem Papier sah es wirklich gut aus: Sie können Komponenten verwenden, die wiederverwendet werden können. Modell, Ansichten und Controller waren klar getrennt. In Wirklichkeit bot das Framework jedoch keine ausreichende Flexibilität. Daher mussten wir Referenzen auf JComboBox beibehalten, um die Daten durch die Abstraktionsschichten zu bekommen. Wir mussten 4-5 Klassen für jedes kleine Stück UI schreiben. In einigen Fällen dauerte es Tage, bis ein Kontrollkästchen in einem Formular hinzugefügt wurde. Das Debugging war schrecklich, da der Prozessablauf für jede einfache Operation 15-20 Klassen durchlief. Erstaunlicherweise waren die Auftritte in Ordnung.
Schlimmste Sache, jede Swing-Komponente wurde in eine Abstraktionsschicht gewickelt, "falls wir das UI-Toolkit ändern wollen"!
An jedem Ort, an dem ich in den letzten fünf Jahren gearbeitet habe!
Meine offiziellen Berufsbezeichnungen haben in den letzten sechs Jahren "Architekt" enthalten, aber an einem mürrischen Tag bin ich eher ein Anti-Architekt, an weniger mürrischen Tagen bin ich ein "minimalistischer Architekt".
Wenn es keinen guten und offensichtlichen Grund für eine Komponente, ein Framework oder ein Feature gibt, dann kann ich es fallenlassen!
In den Fällen, in denen ich überstimmt worden bin, haben sich die zusätzlichen architektonischen Besonderheiten immer als der größte Problembereich herausgestellt.
Dies war vor kurzem auf reddit, mit einem guten "yo daug" Witz.
Einführung: RequestProcessorFactoryFactory
Reddit-Diskussion hier
Wenn Sie Joels Artikel über Architecture Astronauts ( Live Mesh one ) nicht gelesen haben Ich empfehle es - es ist eine gute Lektüre über dieses Thema.
Mein Favorit ist "Auto-Architektur". Im Grunde nur eine Reihe von Regeln, die, wenn Sie der Architektur folgen, korrekt Platz finden ..... anscheinend.
Dies führt dazu, dass jedes Objekt eine Schnittstelle hat, unabhängig davon, ob es Abstraktion und eine Factory (keine neue () für Sie!) für JEDEN einzelnen Dienst ... seufzt benötigt.
Mein Lieblingsärgernis sind "Architekten", die relationale Konzepte nicht verstehen und versuchen, Dinge auf eine objektartige Weise funktionieren zu lassen, wenn Datenbanken satzbasiert besser abschneiden und so gestaltet sein sollten. (Datenbanken sollten nicht von objektorientierten Programmierern entworfen, sondern von Datenbankspezialisten entworfen werden.) Und Architekten, die es für "eleganter" halten, mehrere Dinge in eine Hauptbasistabelle zu legen (Overgeneralisierung) und dann über 100 zu haben Fremdschlüssel zu dieser Tabelle und jede Abfrage, die auf sie verweist, und ein großer Albtraum der Leistung (sowie ein lächerlicher Prozess, um einen Datensatz zu löschen).
Tags und Links java database architecture