Wenn ich im Begriff bin, eine Enterprise-Anwendung zu entwickeln, aber soweit ich aus agilen Prozessen weiß, teile ich Features in kleine Teile auf und entwickle sie iterativ. Ich habe zuerst die Datenbank und den Kern der Anwendung erstellt und diese dann iterativ erweitert.
Die Frage ist: Muss ich das, was ich vorher getan habe, beibehalten (zuerst den Kern entwickeln) oder muss ich die Kernentwicklung auf die Entwicklung der Geschichten verteilen? Im späteren Verlauf bin ich mir nicht sicher, ob der Code für zukünftige Erweiterungen flexibel genug sein wird!
Irgendeine Idee?
architecture
agile
object-oriented-design
Sameh Deabes
quelle
quelle
Antworten:
Entwickeln Sie den Kern nicht zuerst . Ein Schlüsselprinzip der agilen Entwicklung besteht darin, den minimalen Code zu schreiben, der für die abgeschlossenen Funktionen erforderlich ist. Auf diese Weise können Sie jederzeit liefern. Der Code bleibt flexibel, da Sie ihn kontinuierlich umgestalten, um Doppelarbeit zu vermeiden. Das Refactoring wird durch die automatisierten Tests unterstützt, die Sie für jedes Feature geschrieben haben, als Sie es erstellt haben. Der Kern wächst automatisch, wenn Sie die Duplizierung von Code höherer Ebene herausrechnen.
Anstatt Flexibilität in einem normalerweise vergeblichen Versuch zu schaffen, teure zukünftige Codeänderungen zu minimieren, erstellt Agile automatisierte Tests zur Unterstützung des Refactorings, sodass Codeänderungen relativ kostengünstig sind.
Martin Fowlers Refactoring ist mein Lieblingsbuch über effektive Refactoring-Techniken. Es ist viel einfacher, einen verwendbaren Kern herauszufiltern, als einen im Voraus zu definieren. Das Definieren eines verwendbaren Kerns vor der Implementierung von Features ist nahezu unmöglich, es sei denn, Sie implementieren lediglich eine vorhandene API neu. Und das hat keinen Wert.
quelle
Mein Ansatz für eine agile Entwicklung besteht darin, "vertikale Schichten" zu erstellen. Ich nehme eine Geschichte von der Benutzeroberfläche in den Speicher und implementiere sie. Ich habe einige leichte Tools, die ich verwende, um diesen Prozess zu unterstützen (wie ein einfaches IRepository / UnitOfWork-Framework, das Adapter für In Memory (normalerweise zum Testen), Entity Framework und NHibernate enthält Argument, ob man ein O / RM verwenden soll, aber welches man verwenden soll. Und für mich hängt es von der Umgebung ab.
Ich habe festgestellt, dass dieser Ansatz die Neinsager in Bezug auf die agile Entwicklung überzeugt, weil sie funktionierende Software schneller erkennen, als wenn ich viel Zeit im Voraus damit verbringe, einen Kern zu erstellen. In Kombination mit Domain Driven Design und einigen anderen Techniken, die ich verwende, kann ich den Benutzern normalerweise sehr schnell viele Arbeitsfunktionen zur Verfügung stellen.
TDD- oder sogar Post-hoc-Komponententests sind wichtig, da ein Teil der Aufrechterhaltung der Geschwindigkeit bei wachsender Anwendung über das Sicherheitsnetz verfügt, das eine umfassende Komponententestsuite bietet. "Ich muss diese Klasse ändern. Wie stelle ich sicher, dass ich nichts kaputt gemacht habe?" Mit einer guten Unit-Test-Suite ist es so einfach wie das Ausführen dieser Testsuite. Ohne müssen Sie Ihre App manuell durchlaufen, um sie zu überprüfen. Überhaupt kein Spaß.
quelle
Erstellen Sie das minimale horizontale Framework, das einen vertikalen Teil der Funktionalität unterstützt. Das Framework ist erweiterbar gestaltet und konzentriert sich zunächst auf die meisten Anstrengungen. Der vertikale Teil der Funktionalität besteht darin, zu demonstrieren, dass das Framework den tatsächlichen Wert unterstützt. In nachfolgenden Iterationen wird weniger Aufwand aufgewendet, wenn das Framework realisiert wird, und mehr, um mithilfe des Frameworks Funktionen aufzubauen. Fahren Sie auf diese Weise fort, bis sich der größte Teil des Aufwands auf die Funktionalität konzentriert, die das über Iterationen entwickelte Framework verwendet.
quelle