Tipps für die Planung eines Umschreibens eines großen PHP-Projekts?


13

Ich habe mich entschlossen, ein PHP-Framework (mit MVC), an dem ich seit Jahren arbeite, komplett neu zu schreiben. Bisher bestand mein Problem darin, dass ich einfach Ideen einbrachte, sie als Tickets in Trac einbrachte und später hinzufügte - ohne mich um das Design des Frameworks selbst zu kümmern. Mit der Zeit hat dies einige Probleme verursacht, und ich denke, ein Umschreiben wäre hilfreich. Ich bin mir jedoch nicht sicher, wo ich mit der Planung beginnen soll. Ich weiß, dass ich Trac nicht verwenden möchte, und ich weiß, dass ich mehr brauche als nur Tickets und Meilensteine ​​- aber was brauche ich noch?

Ich möchte dieses Umschreiben wirklich gründlich planen, ich möchte jedes Feature, das ich möchte, detailliert beschreiben, wo es hingeht und wie es sich mit jedem anderen Teil verbindet - aber ich habe keine Erfahrung mit dieser Ebene der Planung. Irgendein Rat? Irgendwelche Programme, die helfen werden? Ich habe es satt, Trac, ich habe es nie wirklich gemocht.

Ich weiß, dass ich ein Designdokument benötige, aber gibt es ein bestimmtes Layout, dem ich folgen sollte? Ich brauche auch Bug-Tracking, Tickets, Meilensteine ​​usw., aber hinter Trac weiß ich auch nicht, was dafür gut ist. Ich bin mir sicher, dass ich noch mehr benötige, aber ich habe keine Ahnung, weshalb ich für jede Hilfe dankbar bin.


warum willst du es umschreiben Warum nicht an Orten umgestalten, an denen Verbesserungen erforderlich sind? Wenn Sie etwas von Grund auf neu schreiben, beseitigen Sie wahrscheinlich alte Probleme für neue.

@ Gordon vielleicht ist es so extrem schrecklich geschrieben, dass es besser ist, es umzuschreiben, als es umzugestalten.
Rightfold

Das Umschreiben ist immer schwieriger als es scheint, und ich habe es auf die harte Tour gelernt. Oh, nun, diesmal weiß ich, was ich tue, also wird es halb so lange dauern (dann dauert es länger als das Original, weil du versuchst, Fehler, die du zuvor gemacht hast, zu korrigieren oder ihnen zuvor
vorzubeugen

Antworten:


7

Nachfolgend einige Dinge, die ich bei der Entwicklung eines großen Projekts mache:

1 - Ich verwende ein Planungstool wie OpenProj und füge alle Funktionen hinzu, die ich als Aufgabe aufnehmen möchte. Zum Beispiel arbeite ich gerade an einer Funktion, die es meinen Benutzern ermöglicht, sich automatisch anzumelden, nachdem sie sich auf meiner Site registriert haben. Ich habe eine Aufgabe in meinem Plan wie "Feature-Autologin".

2 - Ich bin ein Ein-Mann-Entwickler, daher wechsle ich normalerweise von einem Feature zum nächsten. Mein Plan ist so angelegt, dass alle Funktionen nacheinander ausgeführt werden. Ich investiere nicht zu viel Zeit, um abzuschätzen, wie viel Zeit ich für jede Funktion benötige. Normalerweise denke ich, dass jeder einen Tag braucht, um sich zu entwickeln. Wenn man mehr braucht, aktualisiere ich einfach den Plan und alle zukünftigen Aufgaben verschieben sich entsprechend.

3 - Ich benutze Git ausgiebig. Jedes Feature ist eine Verzweigung. Sobald ich jedes Feature abgeschlossen habe, füge ich es wieder in den Entwicklungszweig ein und erstelle einen neuen Zweig für das nächste Feature.

4 - Wenn ich einen Fehler in der Software finde, erstelle ich einen kleinen Git-Zweig, um ihn zu beheben und wieder zusammenzuführen, sobald er behoben ist. Ich stelle sicher, dass ich sowohl den Entwicklungszweig als auch meinen aktuellen Feature-Zweig, an dem ich arbeite, aktualisiere. Übrigens wird der Fehler zu einer weiteren Aufgabe in meinem OpenProj-Plan. So etwas wie "Bug-Falsch-Adresse". Und wenn ich es einfüge, werden alle anderen Funktionen wieder in die Timeline verschoben.

5 - Wenn ich während der Entwicklung über ein neues Feature nachdenke, füge ich es einfach in den Plan ein, wo es meiner Meinung nach am besten passt, und passe die Zeitleiste erneut an.

Ich hoffe das hilft. Es hört sich so an, als hätten Sie ein aufregendes Projekt vor sich. Viel Glück!


10

Wenn Sie eine vollständige Neuschreibung vornehmen möchten, warum sollten Sie nicht auch darüber nachdenken, ob Sie überhaupt PHP verwenden sollten? Eine Änderung / Aufrüstung der Technologie könnte der Katalysator sein, den Sie zur Verbesserung Ihres Designs / Ihrer Skalierbarkeit / Wartbarkeit usw. benötigen.


3
Berücksichtigen Sie außerdem, dass vorhandene Frameworks möglicherweise besser geeignet sind als die Erstellung eines weiteren Single-Use-Frameworks.
S.Lott

1
@ S.Lott - Was ist falsch an der Schaffung eines Single-Use-Frameworks, wenn es besser als jedes andere auf diesen Single-Use zugeschnitten ist?
Anonym

1
@ Chris Bridgett: Die Welt braucht möglicherweise kein weiteres hochspezialisiertes Framework. Es kann ein "attraktives Ärgernis" sein. Eine lustige Zeitverschwendung. Bestehende Frameworks machen die Arbeit oft genauso gut. Das "Zuschneiden" in einem speziellen Rahmen beruht oft darauf, dass ein etablierter, vorhandener Rahmen nicht verstanden wird. Bestehende Frameworks sind häufig sicherer, zuverlässiger und schneller. Häufig werden vorhandene Frameworks bereits getestet. Häufig werden vorhandene Frameworks von anderen Teammitgliedern besser verstanden.
S.Lott

@ S.Lott: Ich schreibe dies für mehrere Websites, die ich besitze, und das Design ist so eingerichtet, wie es kein anderes Framework bietet. Ich habe auch nicht vor, es für eine Weile herauszubringen, wenn überhaupt. re: TheLQ: Das war einer meiner ersten Gedanken, aber keine andere Web-Sprache hat die Reichweite, die PHP außer .NET hat. Python wäre vorzuziehen, es jedoch auf cPanel-Servern einzurichten (was leider einen Großteil der Webhosting-Welt ausmacht), ist ein Schmerz.
Jon

1
@ S.Lott Ich habe seit meinem Posting über Symfony, CakePHP und CodeIgniter nachgelesen, und die Nummer eins, die mich davon abhält, diese zu verwenden, ist, dass sich alle blindlings an MVC zu halten scheinen und die Wiederverwendbarkeit ignorieren. Mein aktuelles (und zukünftiges, wenn ich es umschreibe) Design ist MVC in einem einzelnen Ordner (Ein "Modul" -Ordner), mit Ansichten dort, wie der Benutzer es wünscht (Benannt als "example.module.view.php") sowie einem Thema Ordner, in dem Designer ihre eigenen Designs erstellen können, die vorhandene Ansichten überschreiben. Das ist für mich von entscheidender Bedeutung, und keiner der großen Frameworks scheint dies ohne viel Hacking zu tun - das stört mich.
Jon

10

Ich würde vorschlagen, stattdessen stark umzugestalten

Das Problem, das Sie hier erwarten:

Ich möchte dieses Umschreiben wirklich gründlich planen, ich möchte jedes Feature, das ich möchte, detailliert beschreiben, wo es hingeht und wie es sich mit jedem anderen Teil verbindet - aber ich habe keine Erfahrung mit dieser Ebene der Planung. Irgendein Rat? Irgendwelche Programme, die helfen werden? Ich habe es satt, Trac, ich habe es nie wirklich gemocht.

ist eine sehr schwierige Frage. Es ist im Grunde das Waterfall-Modell mit all seiner Hässlichkeit. Hier finden Sie einige anekdotische Beweise für die Probleme mit dem 'Great Rewrite'-Ansatz, die zum Schluss kommen: Sie werden die Probleme wahrscheinlich nicht richtig antizipieren und am Ende ein weiteres Durcheinander haben, das Sie von Grund auf neu schreiben möchten. Nicht weil du schlecht bist, sondern weil es unmöglich ist, etwas Großes auf einen Schlag richtig zu machen.

Wenn Sie stattdessen refactor starten, Sie können Einzelkarten schreiben und Sie können mit dem Projekt fortzufahren. Der Trick dabei ist, kleinere Änderungen zu identifizieren, die zu einem insgesamt besseren Design führen.

Zum Beispiel: Sie erwähnen, Sie haben keine MVC, aber Sie möchten. Als ersten Schritt können Sie eine einzelne PHP-Datei nehmen und diese unter der Annahme der üblichen Verwechslungsgefahr sortieren, so dass Sie oben alle DB-Zugriffe, Berechnungen usw. haben. erste Tickets für jede Datei). Als zweiten Schritt können Sie all diese Template-Teile in Funktionen einkapseln, die ihre Parameter übergeben. (viel mehr Tickets). Erledigt? Herzlichen Glückwunsch, Sie haben Ihr V in MVC beendet.


Ich werde das berücksichtigen, danke. Auch nur um die Dinge aufzuklären - ich benutze gerade MVC.
Jon

@ Jon: Ja, auch mein Beispiel ging von einer typischen Seite aus, von keinem Framework. Aber ich denke, mutatis mutandis, meine Antwort wird dadurch nicht ungültig. Ein Punkt, den ich nicht erwähnte: Refactoring macht Spaß. Es ist sehr lohnend zu sehen, wie totaler Mist zu etwas
Schönem wird

3

Erwägen Sie die Verwendung eines vorhandenen Frameworks. CakePHP, Zend Framework, CodeIgniter und Symfony sind die für PHP bekannten. Wenn sie die Bedürfnisse von Hunderten oder Tausenden von Benutzern befriedigen, können sie sicher Ihre Bedürfnisse befriedigen.

Wenn Sie bereit sind, etwas anderes als PHP zu lernen / zu verwenden - Django (Python) und Rails (Ruby) sind so ziemlich die führenden Frameworks für herkömmliche Webanwendungen.

Das ist natürlich so, es sei denn, Sie möchten Erfahrung in der Erstellung von Frameworks haben - was, wie ich hinzufügen könnte, auf dem Markt viel weniger von Wert ist (anstatt zu wissen, wie man vorhandene, unterstützte Frameworks gut nutzt).


1

Was ich gerne benutze, ist Redmine als Terminplaner. Die IT-Abteilung handhabt jeden dieser Punkte sehr gut und ist (meiner Meinung nach) viel benutzerfreundlicher als trac.

In Bezug auf das erneute Schreiben ist es wichtig, zunächst zu verstehen, dass Sie niemals alle Features / neuen Erweiterungen antizipieren werden, um zu versuchen, Ihre Anwendung so flexibel wie möglich zu gestalten. Die Verwendung vieler MVC-Frameworks, die PHP bietet, kann dabei helfen, dies zu nutzen. Einige dieser Frameworks lochen Sie jedoch auch, wenn Ihre DB-Architektur von Anfang an nicht flexibel ist (Cake). Ich würde mich wirklich darauf konzentrieren, die Dinge so abstrakt wie möglich zu gestalten, und wenn Sie etwas Fest codiertes sehen, fragen Sie sich, wofür es ist und warum es nicht in einer Datenbank gespeichert werden kann.

Wirklich DB-Design hilft bei der Beantwortung so vieler Fragen und Probleme. Hier sehe ich die Hauptbedeutung der Interaktion Ihrer Anwendung. Daher würde ich empfehlen, die meiste Zeit damit zu verbringen, zu analysieren, wie die Daten gespeichert werden und wie Ihre Datenbank strukturiert ist.


1

Als Issue-Tracking-Software ist JIRA großartig, aber sehr teuer. Ein weiteres gutes Tool, das ich benutze, ist Eventum. Es ist kostenlos.

Das Wichtigste ist jedoch, eine gute Vorstellung davon zu haben, was Sie brauchen. Zuerst müssen Sie die Anforderungen für Ihre Bewerbung zusammenstellen, um ein umfassendes Gefühl für das zu haben, was Sie möchten und so vollständig wie möglich zu sein.

Darauf aufbauend erstellen Sie Softwareanforderungen, einen eher technischen Ansatz, in dem Sie die Module beschreiben, die Teil Ihrer Anwendung sein werden, ihre Funktionen und Unterfunktionen, Objekte, Klassen, ihre Schnittstellen und so ziemlich alles.

Wenn Sie wissen, dass Sie die Komplexität der Anwendung und die erforderlichen Codezeilen genau kennen, können Sie eine Schätzung vornehmen und einen Zeitplan erstellen. Es ist wichtig, einen Zeitplan und eine Frist zu haben, andernfalls werden Sie ihn möglicherweise nie zu Ende bringen.

Ich hoffe es hilft


Jira ist sehr günstig für weniger als 10 Benutzer. Die Kosten betragen 10 US-Dollar und die 10 US-Dollar gehen an wohltätige Zwecke.
Sixtyfootersdude
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.