Ich beginne meine Diplomarbeit und das Thema wird "agile Architekturen"
seinIm Grunde wird es mit einer Beschreibung der traditionellen Methoden der Softwareentwicklung und der anschließenden Entwicklung agiler Methoden beginnen, mit Empfehlungen abschließen und eine flexible Anwendungsarchitektur entwerfen, die leicht an die inhärenten Änderungen in der Softwarekonstruktion angepasst werden kann.
Meine Frage ist, welche Muster und Designpraktiken würden Sie für solch eine Architektur empfehlen? Ich interessiere mich für Muster, die eine Maximierung der Klassenentkopplung wie Abhängigkeitsinjektion, hohe Wartbarkeit und maximale Abstraktion von dem spezifischen Problem ermöglichen.
Ich empfehle Folgendes:
Im Grunde predigt alles, was die ALT.NET-Leute predigen.
Definitiv IoC Praktiken und vertragsbasierte Programmierung im Allgemeinen würde ganz oben auf meiner Liste stehen. Aus Erfahrung würde ich jedoch davor warnen, zu sehr vom Problem abstrahieren zu wollen, nur um der Abstraktion willen. Z.B. abstrahieren, weil du es kannst und nicht, weil irgendjemand jemals in der Lage sein wird, diese Abstraktion zu nutzen. Ich habe gesehen, dass diese Art von Architektur schlecht geworden ist und einfach ein zu hohes Maß an Komplexität zu einem System hinzugefügt hat, das die Wartung des Systems verschlechtert.
Eine Art Rückkopplungsschleife für Ihren Entwicklungsprozess - sei es Komponententests, kontinuierliche Integration und / oder "Scrum" Meetings. Mir ist klar, dass dies nicht wirklich in den Bereich der agilen "Architekturen" fällt, aber wenn Sie nicht agile Prozesse haben, wird keine "agil-orientierte" Architektur von Bedeutung sein.
Eine essenzielle Design-Praxis, die ich vorschlagen würde, wäre, zuerst ein funktionales Ende-zu-Ende zu bauen Skelett Ihrer Architektur. Um es so früh wie möglich durch echtes Feedback zu validieren.
Das nennen die Pragmatischen Programmierer "Tracer Bullets" und Alistair Cockburn als " Walking Skeleton ".
Können Sie auch definieren, wo sich eine Anwendung befindet? Der Kontext Ihrer Diplomarbeit? Betrachten Sie nur Anwendungssoftware oder Behandeln Sie auch komplexere Systeme?
Es ist eine interessante Frage, das. Kann eine Architektur agil isoliert erstellt werden? Wenn wir etwas wie XP betrachten, bin ich etwas zweifelhaft. Oder vielleicht habe ich es falsch verstanden, aber das hat mich nie davon abgehalten, mich auszudehnen ...
In XP, um einen Ansatz zu verfolgen, den ich besser kenne, werden wir innerhalb kürzester Zeit eine Art Struktur haben, nachdem wir ein Projekt gestartet haben; über die Zeit, in der die erste Geschichte tatsächlich fertig ist. Während des ersten Story-Writing haben wir angefangen, eine Vorstellung davon zu bekommen, was wir bauen könnten - es ist unvermeidlich: Programmierer neigen dazu, in Bezug auf Code zu denken. Aber zu weit voraus zu denken bringt uns in YAGNI Territorium.
Ich habe mir gedacht, dass ein Großteil der Architektur einer Anwendung, die in einer agilen Umgebung entwickelt wird, vor allem durch konstantes und dediziertes Refactoring entstehen wird, um Duplikate zu beseitigen.
Es stellt sich also vielleicht auch die Frage, ob bestimmte Merkmale - oder Klassen von Eigenschaften - Architekturen, die sich aufgrund eines agilen Prozesses entwickelten, tendenziell auftauchen. Und dann denke ich, dass es davon abhängen wird, welche Art von App wir bauen, obwohl einige der bereits erwähnten Prinzipien (von denen ich einige sogar verstehe) wahrscheinlich sind.
Soweit es mich betrifft, predigt Agile keine "Architekturen" als solche. Agile ist eine Methodik, die auf fundamentalen Prinzipien basiert, die sich auf Projektmanagement, Veröffentlichungszyklen und allgemeine Entwicklungspraktiken auswirken, aber sicherlich nicht auf Softwarearchitektur.
Alle hier aufgelisteten Softwaremuster könnten mit einem starken Wasserfallprozess verwendet werden, der der agilen Entwicklung ein Gräuel ist.
Agil zu sein bedeutet, dass Sie Veränderungen annehmen, dh Änderungen an den Anforderungen und Designentscheidungen vornehmen und Refactoring etc. akzeptieren. Viele Dinge würden "traditionelle" Art und Weise missbilligen, da Sie etwas berühren, was funktioniert / vorher vereinbart wurde.
>Bei Methoden wie XP versucht man, die Qualität durch Schreiben von Komponententests hoch zu halten. Lassen Sie uns so tun, als wären wir uns einig, Unit-Tests zu schreiben.
Hier können Sie eine Architektur einführen, so dass das System testbar oder prüfbar ist, da nicht alle Systeme testbar sind. Beispielsweise können Sie die aufrufbare Ebene der mittleren Ebene und die separate Benutzeroberfläche von der Geschäftslogik usw. abschneiden.
Wenn Robert Martin etwas dazu zu sagen hat (und er nannte das ursprüngliche Agile Manifest Treffen IIRC), dann hat absolute Architektur alles mit Agilität. Der gesamte erste Abschnitt seines Buches Agile Software-Entwicklung, Prinzipien, Muster und Praktiken dreht sich um die SOLID Architekturprinzipien. Das war in einigen Kreisen umstritten, aber ich verstehe nicht warum. Wenn Ihre Codebasis spröde und stark gekoppelt ist, dann kann sie nicht sehr offen für Veränderungen sein, was das Kennzeichen von Agilität ist. Es ist sehr unhandlich, den Prozess von der Code-Praxis zu trennen.
Prinzip 1 des Manifests: "Wir schätzen Individuen und Interaktionen über Prozesse und Werkzeuge."
Agiles "Verfahren" als eine von der Architektur der Codebasis getrennte Abstraktion zu definieren, verstößt gegen den Geist dieses ersten Prinzips.
Tags und Links design-patterns architecture agile