Duplizieren : Design & amp; ; Codierung - von oben nach unten oder von unten nach oben?
Ich glaube, ich habe in meiner jüngsten Erfahrung festgestellt, dass ich Software anders als die meisten meiner Kollegen entwickle. Ich tendiere dazu, den inkrementellen Bottom-up-Ansatz zu wählen, nachdem ich genügend Anforderungen gesammelt habe, um eine übergeordnete Idee der Komponenten in der Software zu erhalten.
Wenn ich also eine Schnittstelle entwickle, die mehrere konkrete Klassen unterstützt, ... würde ich mir ansehen, was jeder konkrete Kandidat gemeinsam hat, und fragen, wie ich die Arbeit für jede konkrete Aufgabe erledigen würde (beim Nachdenken über Robustheit für zukünftigen Beton). Dann nehme ich diese Gemeinsamkeiten und stelle eine Schnittstelle her, die meiner Meinung nach ein "Bottom-up" -Ansatz ist.
Im Fall eines Top-Down-Ansatzes würde ich glauben, dass der Designer die Client-Seite der Schnittstelle betrachten würde und wie ein Client mit der Schnittstelle interagieren und dann versuchen würde, die konkreten Klassen zu implementieren.
So kann ich Vor- und Nachteile von Top-Down / Bottom-Up sehen. Ich würde gerne wissen, welches effizienter ist und ein besseres Ergebnis liefert, basierend auf Ihren bisherigen Erfahrungen?
Hinweis: Ich spreche nicht über Entwicklungsmethodik (agile, Wasserfall, etc.), ich spreche über Design-Ansätze.
Ich glaube, dass mit guten Softwareentwicklern (und meiner Meinung nach sollten alle Softwareentwickler auch Softwareentwickler sein), die Magie darin besteht, Top-Down und Bottom-Up gleichzeitig zu machen.
Was ich von meinen Mentoren "gelernt" bekommen habe, ist sehr kurz von oben nach unten, um die involvierten Entitäten zu verstehen, dann gehe ich von unten nach oben, um die grundlegenden Elemente zu finden, die ich erstellen möchte sieh zu, wie ich eine Ebene tiefer gehen kann, wissend, was ich über die Ergebnisse meines Bottom-Ups weiß, und so weiter, bis "sie sich in der Mitte treffen".
Ich hoffe, das hilft.
Kommt auf das Problem an.
Wenn Sie wissen, was das Problem ist [Kunden online Kontoauszüge anzeigen lassen] und wie Sie es lösen können, verwenden Sie einen Bottom-up-Ansatz. Analysiere jeden Schritt, gruppiere diese nach Bereichen und entwickle eine Lösung. Projektplan basiert.
Wenn Sie eine vage Vorstellung von dem Problem haben [erlauben Sie Feldagenten, über ein verteiltes Offline- / Online-Wiki zu kommunizieren], dann würde ein Top-Down-Ansatz besser funktionieren. Sehen Sie sich das Gesamtproblem an und welche Schritte können verwendet werden, um sie zu lösen. Versuch und Irrtum. Agil.
Es gibt keine perfekte Möglichkeit, Software zu entwickeln. Kein Ansatz garantiert das perfekte Design.
Sie müssen das Problem auf verschiedene Arten betrachten, wenn Sie eine Lösung dafür entwerfen, und wenn Sie ein Design haben, sollten Sie es auch auf andere Arten betrachten. Sie werden nicht das gleiche Design haben, wenn Sie es von oben angehen, als würden Sie es von unten angehen. Tun Sie beides und wählen Sie die Vorteile aus, die Ihnen beide Methoden bieten.
Verstehen Sie das Problem auf höchster Ebene und arbeiten Sie sich durch die Lösung, indem Sie Teile identifizieren, bei denen die Details möglicherweise das Design ändern (Details, die Sie von der untersten Ebene aus angehen sollten, und sich wieder hocharbeiten). Durchlaufen Sie alle Komponenten des Problems, bis Sie ein Design haben, mit dem Sie arbeiten können.
Code Complete Kapitel 5 kann wirklich dazu beitragen, die Details dessen, was ich hier sage, auszuarbeiten. Ich schlage vor, dass Sie einen Blick darauf werfen.
Ich bin mir nicht sicher, ob ich Ihre Frage richtig verstanden habe, aber wenn ich das tue, fragen Sie nach Pro / Contra mit dem Erstellen einer Anwendung, und dann ist es die Schnittstelle oder das Erstellen einer Schnittstelle und dann das Erstellen der App, um es tatsächlich zu machen Zeug.
Ich würde sagen, dass vieles von der Antwort abhängt von wem du entwickelst / entwirfst. Ist es Ihr Ziel, den Nutzern eine coole und (vielleicht) nützliche App zu bieten? Beginnen Sie mit der Benutzeroberfläche. Oder versuchen Sie, eine Schnittstelle zu einem Geschäftssystem (die möglicherweise bereits existiert) zu erstellen oder Aufgaben auszuführen, die bereits auf andere (weniger effiziente) Weise ausgeführt werden? Beginnen Sie mit den Aufgaben.
Bottom-up ist, was viele von uns programmieren. Nicht durch Wahl, sondern durch Intellisense. Petzold hat einen Artikel über dieses hier geschrieben.
In der Praxis denke ich, dass die Mehrheit der Architekten so denken wird. Ich persönlich glaube nicht, dass ich jemals jemanden gesehen habe, der das Design anders herum gemacht hätte (konkret zu abstrahieren).
Sicher, Anforderungen sind konkret, aber man verwendet im Allgemeinen Anforderungen, um die Abstraktionen zu steuern und den Zweck und die Absicht der Software zu definieren.
Tags und Links architecture design