Refactor oder Konzentrieren Sie sich auf das Ausfüllen der App

23

Würdest du deine App umgestalten oder dich darauf konzentrieren, zuerst die App fertigzustellen? Refactoring bedeutet, dass der Fortschritt der App App verlangsamt wird.

Wenn Sie die App fertigstellen, erhalten Sie später möglicherweise eine sehr schwer zu wartende App?

Die App ist ein persönliches Projekt. Ich weiß nicht wirklich, wie ich antworten soll: "Was treibt die Funktionalität und das Design an?" Ich mag minimal einfach zu bedienende Software auch. Daher entferne ich einige Funktionen und füge einige hinzu, von denen ich glaube, dass sie helfen werden.

Jiew Meng
quelle
1
Können Sie zusätzliche Daten zu Ihrem Szenario bereitstellen? Handelt es sich zum Beispiel um ein Einpersonenprojekt oder sind Sie in einem Team? Handelt es sich um ein kommerzielles Produkt, ein Inhouse-Produkt oder ein Open-Source-Produkt? Was treibt die Funktionalität und das Design an?
mlschechter
@mlschechter, ich arbeite gerade an einem persönlichen Projekt. Habe mich noch nicht entschieden, ob ich es verkaufen (zB auf Codecanyon) oder Open Source veröffentlichen werde. Ich weiß nicht wirklich, wie ich antworten soll: "Was treibt die Funktionalität und das Design an?" Ich mag minimal einfach zu bedienende Software auch. Also entferne ich einige Funktionen und füge einige hinzu, von denen ich glaube, dass sie helfen werden
Jiew Meng

Antworten:

23

Bring es zum Laufen. Dann mach es schnell. Mach es endlich schön.

Wenn Sie eine gute Trennung zwischen Ihrem Code (Präsentations-, Geschäfts- und Datenebene) mithilfe von Schnittstellen haben und es sich nicht um ein monolithisches Design handelt, sollte das Refactoring nicht so schwierig sein.

Wenn Sie so viele Schwierigkeiten beim Refactoring haben, ist das wahrscheinlich ein Codegeruch - ich schlage vor, Sie schauen sich Solid Principles an

Watson
quelle
+1 für Lass es funktionieren . Dann mach es schnell . Mach es endlich schön .
Karthik Sreenivasan
Mein Punkt auch. Refaktorieren Sie erst, wenn Sie feststellen, dass Ihr Entwurf die Ausführung der Aufgabe verhindert.
Gus
Wenn Sie den Unit-Test verwenden, um sicherzustellen, dass er wirklich funktioniert , und nicht nur das Richtige zu tun scheint, entspricht die durch diese Tests hervorgerufene Struktur 90% des Refactorings, das Sie jemals durchführen möchten.
Michael Anderson
Ich würde eher sagen: Lass es funktionieren, mach es richtig, mach es schnell - in dieser Reihenfolge.
Niklas H
Es würde eher gehen wie: Machen Sie es arbeiten , machen es schnell , machen es wieder arbeiten , machen es schön , machen es wieder funktionieren . Wenn Sie es an diesem Punkt wieder schnell machen müssen, haben Sie es falsch gemacht.
Florian F
8

Ich denke, der wesentliche Punkt ist, die Schnittstellen sauber zu halten . Sie können Module / Klassen / beliebige Implementierungen später immer umgestalten oder sogar umschreiben, solange die Kommunikationsebenen zwischen ihnen vernünftig sind. Nehmen Sie sich etwas Zeit, um herauszufinden, was später leicht zu ändern ist und was nicht. Machen Sie letzteres richtig.

Dies steht im Einklang mit dem Geist von TDD. Um gute Tests schreiben zu können, benötigen Sie eine gute Schnittstelle zum Testen. Wie chaotisch es im Moment hinter den Kulissen ist, ist nicht so wichtig, weil Sie es später verbessern können.

Joonas Pulakka
quelle
5

Ich überarbeite immer, wenn ich gehe, besonders mit TDD.

  1. Schreiben Sie die Tests

  2. Machen Sie die Tests erfolgreich

  3. Refactor

Auf diese Weise haben Sie weniger Fehler und einen besseren Code für das fertige Produkt. Außerdem haben Sie weniger Code zum Verwalten, wenn Sie fertig sind.

Jason
quelle
5

Refactor früh und oft! Die Zeit, die Sie "einsparen", um es nicht zu tun, wird oft damit verbracht, das nächste Feature zu hacken und nach Fehlern in übermäßig komplexem oder chaotischem Code zu suchen.

harald
quelle
2

Refactoring ist wie das Abholen Ihres Zimmers.

Wenn Sie für Ordnung sorgen, haben Sie einen linearen Overhead, der proportional zu der Menge an produktiver Arbeit ist, die Sie in algorithmologischen Begriffen am Code O (n) ausführen. Angenommen, Sie verbringen 10% Ihrer Zeit mit Umgestalten (oder Aufräumen), dann sind 10% eine Selbstverständlichkeit und bleiben über die Zeit konstant.

Wenn Sie jedoch Ihre schmutzigen Sachen in eine Ecke werfen und weitermachen, wird die Zeit, die Sie für die Abholung Ihres Zimmers benötigen, immer länger, je komplexer das Chaos wird. Angenommen, jedes einzelne Stück schmutziger Wäsche trägt exponentiell zur erforderlichen Reinigungszeit bei, befinden Sie sich jetzt in einer O (e n ) -Situation.

Jeder, der sich jemals mit dem Konzept der algorithmischen Komplexität befasst hat, wird feststellen, dass es irgendwo eine Gewinnschwelle gibt, das heißt, dass sich eine optimale Menge an Schmutzwäsche ansammelt. Wie viel das ist, hängt von den konstanten Faktoren ab, die in der Big-O-Notation verworfen werden. Ein weiterer Faktor ist der Wert Ihrer Arbeit im Laufe der Zeit: Wenn Ihre Arbeit jetzt viel wert ist, aber in der nächsten Woche günstig (dh es gibt eine Frist für diesen Freitag für dieses Projekt und drei weitere, aber danach sind Sie meistens untätig ) könnte sich die Gleichung zugunsten eines Nicht-Refactorings herausstellen.

Und dann ist da noch die kritische Masse der Komplexität. Irgendwann wird das Durcheinander (wenn Sie so wollen, "kritisches Durcheinander") so schlimm, dass es einfacher zu sein scheint, den gesamten Raum niederzubrennen und neue Kleidung zu kaufen. In der Realität ist dies normalerweise nicht der Fall, aber es scheint so zu sein, und psychologische Effekte werden es zehnmal schwieriger machen, die Sache anzugehen.

Und natürlich haben Sie nur eine begrenzte Auswahl, wenn Sie in ein Projekt eintreten, das bereits ein riesiges, mehrfach redundantes Durcheinander darstellt.

TL; DR: Im Zweifelsfall Refactor. Sie sollten wirklich gute Beweise haben, bevor Sie sich dagegen entscheiden.

tdammers
quelle
1

Wenn Sie die Möglichkeit haben, Funktionen hinzuzufügen oder Fehler zu beseitigen, um Ihren Umsatz / Ihre Kundenzufriedenheit dort zu erreichen, wo Sie es für richtig halten, tun Sie es. Sobald es weniger neue Anforderungen gibt, können Sie mit dem Refactoring ausgleichen. Irgendwann müssen Sie sicherstellen, dass Sie den gewünschten Code schreiben. Wenn alle Dinge gleich sind, würde ich lieber 100 Stunden Code wegwerfen als 1000. Was Sie tun, wenn niemand es will.

JeffO
quelle
0

Kommt wirklich drauf an wo du bist!

Andere Dinge, über die man nachdenken sollte:

Wie sicher sind Sie, dass Sie wirklich das richtige funktionale Design haben? Könnten Sie am Ende noch einmal umgestalten, nachdem Sie ein Feedback von den Benutzern erhalten haben?

Ich würde lieber veröffentlichen als umschreiben. Optimieren Sie, nachdem Sie sicher sind, dass Sie das funktionale Design gefunden haben.

Jeremy
quelle
0

Solange Sie sicher sind, dass Sie die Frist einhalten können, können Sie alles umgestalten, was Sie wollen. Aber selbst wenn es ein bisschen Unsicherheit gibt, sollte man besser an der Entwicklung festhalten und nur in bescheidenen Schritten refaktorieren.

Gaurav
quelle
0

Wenn das schlechte Design, das Sie umgestalten möchten, Ihnen wirklich weh tut, beheben Sie es jetzt besser, als mehr Code zu erstellen, der davon abhängt. Ein späteres Refactoring wäre schwieriger und teurer. Sie werden es wahrscheinlich nicht mehr schaffen.

Auf der anderen Seite, wenn Ihr einziges Problem die Hässlichkeit ist, möchten Sie vielleicht zuerst Ihre Software vervollständigen, da kaum etwas besser ist , als Dinge zu erledigen .

user281377
quelle
0

Refactoring ist sehr wichtig, wenn Sie an der Fertigstellung Ihrer Bewerbung arbeiten.

+ VES

  1. Clear Flow: Refactoring bietet Klarheit über den Code, da manchmal, wenn der Code wenig unstrukturiert ist, der Codefluss nach einer bestimmten Zeit schwierig wird und Refactoring-Code zu einer schwierigen Aufgabe wird und Fehler auftreten können.

  2. Verbessern der Leistung: Die ordnungsgemäße Umgestaltung der Anwendung trägt definitiv zur Verbesserung der Anwendungsleistung bei.

  3. Wartung: Last but not least wäre es auf lange Sicht einfacher zu warten.

-VE

  1. Zeitaufwand: In jeder Phase Ihres Fortschritts ist der Zeitaufwand erheblich höher. Es könnte also zu einer Verzögerung bei der Fertigstellung kommen.

Endeffekt

Je nach Projekttyp können Sie Prioritäten für die Codequalität oder den Abschluss festlegen, je nachdem, was für die aktuelle Situation erforderlich ist.

Karthik Sreenivasan
quelle
Was sind VES und VE?
FreeAsInBeer
positiv und negativ.
Florian F
0

Aufgrund meiner persönlichen Erfahrung beende ich die Apps in der Regel zuerst mit der Bedingung, dass eine Frist zu erreichen ist. Sobald Sie fertig sind, können Sie es umgestalten.

Beende es und überarbeite es. Aber wenn es keine Frist für Eile oder Zeit gibt, schlage ich eine Umgestaltung vor, die gut wäre.

user962206
quelle