Wie soll ich meine Codebasis planen? [geschlossen]


10

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?


welche Sprache ?

Nicht Stift und Papier. Tastatur und Monitor.
Tulains Córdova

Antworten:


6

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.


Ich glaube, Sie meinen "Perspektive", nicht "Perspektive". (Ich kann keine Bearbeitung vornehmen, da es weniger als sechs Zeichen sind.)
Maxpm

4

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.


Ernsthafte Frage: Was nützt ein Anwendungsfalldiagramm? Diejenigen, die ich gesehen habe, waren alle schmerzlich triviale Strichmännchen- und Ballonzeichnungen, die mir nichts sagten, was ich noch nicht wusste.
Joris Timmermans

1
MadKeithV - wie jedes Werkzeug sind sie nur so gut wie die Person, die sie benutzt. Versuchen Sie, die schmerzlich trivialen Fälle zu vermeiden und sich auf die komplexeren Situationen zu konzentrieren. Was Sie jedoch trivial finden, können andere im Team nicht. Ein Anwendungsfall oder ein anderes Diagramm stellt sicher, dass alle von demselben Hymnenblatt singen.
Gavin Coates

@ Gavin Coates - Ich verstehe irgendwie, was Sie sagen, aber kennen Sie Online-Beispiele, die ich mir ansehen könnte, um meine Meinung zu diesen Diagrammen wirklich zu beeinflussen?
Joris Timmermans

3

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 ...

Alt-Text

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.

Alt-Text
(Quelle: ejb3.org )

Einige meiner Kollegen sagten, meine Arbeitsweise sei Mist ... aber ich mag es :-)


2

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:

  1. Text vom Benutzer abrufen
  2. Konvertieren des Textes in ein Bild
  3. Speichern des resultierenden Images auf der Festplatte

Dann können Sie Ihre Idee, den Text in ein Bild umzuwandeln, verfeinern. Das könnte also so aussehen:

  1. Bestimmen Sie die Anzahl der Zeilen, die der Text einnehmen soll
  2. Wählen Sie zufällige Farben für den Text und den Hintergrund
  3. Verarbeiten Sie es in einem geeigneten Format

Dann können Sie die Idee, zufällige Farben auszuwählen, verfeinern und bald schreiben Sie nur noch normalen Code.


2

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.


2

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.