Ich arbeite derzeit an einem Projekt, das über 5.000 Codezeilen erreichen soll, aber ich habe das Design nie wirklich vollständig durchdacht. Mit welchen Methoden sollte ich meinen Code strukturieren und organisieren? Papier und Stift? UML-Diagramme? Etwas anderes?
architecture
uml
Ryan
quelle
quelle
Antworten:
Sie erhalten wahrscheinlich so viele verschiedene Ansichten, wie es Antworten geben wird. Aber hier ist meine Perspektive.
Für den Anfang sind mehr als 5000 Codezeilen ein sehr sehr kleines Projekt. Wie gestalten Sie nun Projekte, die wachsen? Zunächst entwerfen Sie Ihr System und keinen Code. Code ist der Architektur eigentlich untergeordnet. Beginnen Sie mit der Unterstützung der aktuellen Mindestanforderungen. Setzen Sie eine vereinfachte Zeichnung der beteiligten Komponenten. Ich persönlich mag UML, aber alles Visuelle wird gut sein. Idealerweise möchten Sie hier gute Entwurfspraktiken einhalten (Schnittstellen, Trennung von Bedenken usw.).
Wenn Sie minimale Anforderungen in Ihrem Design unterstützt haben, codieren Sie es. Versuchen Sie erneut, gute Codierungspraktiken einzuhalten.
Fügen Sie danach iterativ weitere Funktionen hinzu, wenn neue Anforderungen auftreten. Idealerweise möchten Sie auch Ihr Design aktualisieren.
Nach meiner Erfahrung ist es wichtig, Ihr System nicht im Hinblick auf nicht vorhandene Anforderungen zu entwerfen. Andernfalls wächst Ihr Projekt sehr schnell und wird in kurzer Zeit sehr komplex. Wieder - halten Sie sich an bewährte Praktiken und beginnen Sie mit konkreten aktuellen Anforderungen.
quelle
Flussdiagramm, Klassendiagramm, Anwendungsfalldiagramm sind die unverzichtbaren Diagramme für große Projekte. Suchen und wählen Sie die externen Bibliotheken aus, die Sie benötigen, und suchen Sie nach ähnlichen Open Source-Codes, die Sie verwenden können (um zu lernen und die Entwicklungszeit zu verkürzen).
Ich empfehle Ihnen, ein Whiteboard und einige bunte Magnete und Post-It zu kaufen. Es wird Ihnen helfen, Ihre Aufgaben zu identifizieren.
ps 5000+ Codezeilen sind jedoch nicht "groß". Eine CMS / Forum-Software verfügt über mehr als 5000 Codezeilen.
quelle
Ich würde Paket- und Klassendiagramme erstellen. Im Paketdiagramm wäre ich daran interessiert, Klassen und Schnittstellen auf logische Weise zu gruppieren. Ich möchte auch innere Pakete erstellen etc ...
Aber zuerst müssen Sie überlegen, was das Programm tun soll. Sie können Anwendungsdiagramme erstellen oder manuell ausführen. Ich mache es manuell mit dem Klassendiagramm, weil ich den Code lieber sofort erhalten möchte und es später einfacher ist, auf Paketklassendiagramme umzusteigen. Wenn ich das Klassendiagramm benutze, bekomme ich mein Java. Wenn es mir nicht gefällt, ändere ich es manuell. Der neue Code wird automatisch in meine Diagramme aktualisiert. Ich habe eine visuell aktualisierte Darstellung meines Codes auf hoher Ebene. Wirklich hilfreich, denn selbst wenn ich codiere, kann ich mir immer ein paar Minuten Zeit nehmen, um zu sehen, wie mein Projekt grafisch abläuft. Ich ziehe Entitäten einfach manuell in das richtige Paket, um sie zu organisieren. Ich denke, dass mein Code besser ist, wenn man ein höheres Abstraktionspaket und Klassendiagramme verwendet.
(Quelle: ejb3.org )
Einige meiner Kollegen sagten, meine Arbeitsweise sei Mist ... aber ich mag es :-)
quelle
Bestimmt. Ich habe ein kleines "Tablet" -Programm zum Löschen, das ich für solche Dinge verwenden kann, aber benutze alles, was du willst. Das Wichtigste ist, dass Sie sich leicht Gedanken machen und das Gesamtbild sehen können, wie alles zusammenpasst.
Einige Leute bevorzugen formellere Pläne, wie UML-Diagramme, aber ich bin der Meinung, dass es zu einfach ist, sich mit Mikromanagement vertraut zu machen, wie jede Methode aussehen sollte. Verwenden Sie jedoch wieder alles, was Sie möchten.
BEARBEITEN: Sie könnten auch an der Programmierung von Kenntnissen interessiert sein . Die Idee ist, dass Sie alles planen und schrittweise spezifischer werden können. Zum Beispiel könnten Sie sagen, dass Ihr Programm besteht aus:
Dann können Sie Ihre Idee, den Text in ein Bild umzuwandeln, verfeinern. Das könnte also so aussehen:
Dann können Sie die Idee, zufällige Farben auszuwählen, verfeinern und bald schreiben Sie nur noch normalen Code.
quelle
Für mich ist die Aktivität der Softwareentwicklung eine Reihe von zunehmend feinkörnigeren Designs, um ein bestimmtes Problem zu lösen. Wenn Sie nur eine allgemeine Vorstellung davon haben, was Sie erstellen, ist Ihr Design möglicherweise sehr hochrangig, z. B. "Es wird eine Webanwendung geben, die mit einer SQL-Datenbank und mehreren Webdiensten kommuniziert" oder ähnliches. Wenn Sie dann die Details der einzelnen Teile genauer untersuchen, wird das Design feiner. Abhängig von der Komplexität der Lösung wird es mehr oder weniger Iterationen des Entwurfsaufwands geben. Die letzte Iteration umfasst das Erstellen des tatsächlichen Codes, der die höheren Ebenen des Entwurfs implementiert.
Für mich ist der Unterschied zwischen Architektur und Design minimal und es handelt sich nur um unterschiedliche Iterationen des oben beschriebenen Prozesses. Die Linie zwischen den beiden ist verschwommen und für verschiedene Menschen unterschiedlich.
Es ist eine Kunst zu entscheiden, auf welcher Ebene von Designdetails, für welche Teile der Anwendung und an welchen Punkten im Projektlebenszyklus gearbeitet werden soll. Für Projekte mit hohem Risiko und hoher Komplexität möchten Sie möglicherweise ein sehr detailliertes Design, bevor Sie jemals eine Codezeile schreiben. Bei kleineren Projekten müssen Sie nur sehr wenig im Voraus entwerfen, nur Code herausschlagen und dann sehen, was nicht funktioniert, und diese Bereiche neu gestalten. Hier gibt es nicht nur eine Antwort. Normalerweise liegt es irgendwo zwischen diesen beiden Extremen.
Ich habe einen Blog-Beitrag , der über einige der Prinzipien spricht, die ich bei der Annäherung an die Architektur verwende. Dies kann für Sie hilfreich sein, wenn Sie in diese Richtung denken. Einige Artikel sind spezifisch für .NET, die meisten jedoch nicht.
quelle
Ich habe mir immer die gleiche Frage gestellt. Jetzt übe ich nur noch testgetriebene Entwicklung und mache mir darüber keine Sorgen. Ich "plane" den Code überhaupt nicht, außer um den Standards für die gewählte Architektur zu folgen. Wenn ich ein Projekt starte, habe ich eine Vorstellung davon, was benötigt wird, aber während der Entwicklung versuche ich, offen zu bleiben. Indem ich die testgetriebene Entwicklung verfolge und den Code kontinuierlich überarbeite, muss ich den Code nicht "planen". Ich befriedige nur einen Testfall nach dem anderen, und das Design ergibt sich aus dem Refactoring. Dies ist immer ein besseres Design als alle Pläne, die ich vor dem Codieren hätte machen können.
quelle