J'ai décidé de réécrire complètement un framework PHP (en utilisant MVC) sur lequel je travaille, on et off, depuis des années. Mon problème jusqu'à présent était que je venais juste de trouver des idées, de les jeter dans Trac en tant que tickets et de les ajouter plus tard - sans me soucier de la conception du framework lui-même. Au fil du temps, cela a causé des problèmes et je pense qu'une réécriture serait utile, mais je ne sais pas par où commencer avec sa planification - je sais que je ne veux pas utiliser Trac, et je sais que j'ai besoin de plus que juste billets et jalons - mais de quoi d'autre aurais-je besoin?
Je veux vraiment planifier soigneusement cette réécriture, je veux détailler chaque fonctionnalité que je veux, où elle ira et comment elle se connectera à toutes les autres parties - mais je n'ai aucune expérience de ce niveau de planification. Aucun conseil? Des programmes qui vous aideront? Je me lasse de Trac, je ne l'ai jamais vraiment aimé.
Je sais que j'aurai besoin d'un document de conception, mais y a-t-il une mise en page certaine à suivre? J'aurai également besoin d'un suivi des bogues, de tickets, de jalons, etc., mais au-delà de Trac, je ne sais pas non plus ce qui est bon pour cela. Je suis sûr qu'il me faudra plus mais je n'ai aucune idée de quoi, donc toute aide serait appréciée.
Réponses:
Voir ci-dessous certaines choses que je fais lors du développement d'un grand projet:
1 - J'utilise un outil de planification comme OpenProj et j'ajoute toutes les fonctionnalités que je souhaite inclure en tant que tâche. Par exemple, en ce moment, je travaille sur une fonctionnalité permettant à mes utilisateurs de se connecter automatiquement après leur inscription sur mon site. J'ai une tâche dans mon plan comme "fonctionnalité-connexion automatique".
2 - Je suis un atelier de développement individuel, donc je passe généralement d'une fonction à l'autre. Mon plan est créé de manière à ce que toutes les fonctionnalités soient séquentielles. Je n'investis pas trop de temps pour estimer le temps dont j'ai besoin pour chaque fonctionnalité. Je considère généralement que chacun me prendra un jour pour me développer. Si l'on en prend plus, je mets simplement à jour le plan et toutes les tâches futures se déplacent en conséquence.
3 - J'utilise largement git. Chaque fonctionnalité est une branche. Une fois que j'ai terminé chaque fonctionnalité, je la fusionne à la branche de développement et crée une nouvelle branche pour la fonctionnalité suivante.
4 - Si je trouve un bug dans le logiciel, je crée une petite branche git pour le corriger et le fusionner une fois qu'il est résolu. Je m'assure de mettre à jour à la fois la branche de développement et ma branche de fonctionnalité actuelle sur laquelle je travaille. Par ailleurs, le bug devient une autre tâche dans mon plan OpenProj. Quelque chose comme "bug-mauvaise-adresse". Et lorsque je l'insère, toutes les autres fonctionnalités sont replacées dans la chronologie.
5 - Pendant que je développe, si je pense à une nouvelle fonctionnalité, je l'inclus simplement dans le plan où je pense qu'elle conviendra le mieux et ajustera à nouveau la chronologie.
J'espère que ça aide. Il semble que vous ayez un projet passionnant devant vous. Bonne chance!
la source
Si vous optez pour une réécriture complète, pourquoi ne pas également considérer si vous devriez utiliser php? Un changement / mise à niveau de la technologie pourrait être le catalyseur que vous souhaitez améliorer votre conception / évolutivité / maintenabilité, etc.
la source
Je suggérerais de refactoriser fortement à la place
Le problème que vous anticipez ici:
est vraiment difficile. Il s'agit essentiellement du modèle Waterfall avec toute sa laideur. Voici quelques preuves anecdotiques des problèmes de l'approche de la `` grande réécriture '', qui arrivent à la conclusion: vous n'anticiperez probablement pas les problèmes correctement et vous vous retrouverez avec un autre gâchis que vous souhaitez réécrire à partir de zéro. Pas parce que vous êtes mauvais, mais parce qu'il est impossible d'obtenir quelque chose de gros en un seul coup.
Lorsque vous commencez à refactoriser, vous pouvez écrire des tickets individuels et vous pouvez continuer à utiliser le projet. L'astuce consiste à identifier les changements plus petits qui conduisent à une meilleure conception globale.
Par exemple: vous mentionnez, vous n'avez pas de MVC, mais vous le souhaitez. Dans un premier temps, vous pouvez prendre un seul fichier PHP et, en supposant le mixage habituel, le trier, de sorte qu'en haut vous avez tous les accès db, les calculs, etc., en bas vous avez le "templating" ( premiers billets, pour chaque fichier). Dans un deuxième temps, vous pouvez encapsuler toutes ces parties de modèles dans des fonctions, qui font passer leurs paramètres. (beaucoup plus de billets). Terminé? Félicitations, vous avez terminé votre V en MVC.
la source
Envisagez d'utiliser un cadre existant. CakePHP, Zend Framework, CodeIgniter et Symfony sont les plus connus pour PHP. S'ils répondent aux besoins de centaines ou de milliers d'utilisateurs, je suis sûr qu'ils peuvent répondre aux vôtres.
Si vous êtes prêt à apprendre / utiliser autre chose que PHP - Django (Python) et Rails (Ruby) sont à peu près les principaux frameworks pour les applications Web conventionnelles.
C'est, bien sûr, à moins que vous ne vouliez de l'expérience dans la création de cadres - ce qui, je pourrais ajouter, a beaucoup moins de valeur sur le marché (plutôt que de savoir comment bien utiliser les cadres existants et pris en charge).
la source
Ce que j'aime utiliser, c'est Redmine comme outil de suivi des horaires. Il gère très bien chacun de ces éléments, tout en étant beaucoup plus convivial (à mon avis) que trac.
En ce qui concerne votre réécriture, il est important de comprendre d'abord que vous n'anticiperez jamais toutes les fonctionnalités / nouvelles extensions qui peuvent apparaître, alors essayez d'écrire votre application aussi flexible que possible. L'utilisation de nombreux frameworks MVC dont PHP dispose peut aider à tirer parti de cela; cependant, certains de ces frameworks peuvent également vous troubler si votre architecture DB n'est pas flexible dès le départ (Cake). Je m'attacherais vraiment à rendre les choses aussi abstraites que possible, et chaque fois que vous voyez quelque chose de dur, demandez-vous à quoi il sert et pourquoi ne peut-il pas être stocké dans une base de données.
Vraiment, la conception de base de données aide à répondre à tant de questions et de problèmes, et c'est là que je vois l'importance principale de la façon dont votre application interagit; donc je recommanderais de passer une bonne majorité de temps à analyser comment les données sont stockées et comment votre base de données est structurée.
la source
En tant que logiciel de suivi des problèmes, JIRA est génial, mais il est très cher. Un autre bon outil que j'utilise est Eventum. C'est gratuit.
Mais le plus important est d'avoir une bonne idée de ce dont vous avez besoin. Vous devez d'abord rassembler les exigences de votre demande, pour avoir une idée globale de ce que vous voulez et aussi complet que possible.
Sur cette base, vous créerez des exigences logicielles, c'est une approche plus technique dans laquelle vous décrirez les modules qui feront partie de votre application, leurs fonctions et sous-fonctions, objets, classes, leurs interfaces, à peu près tout.
En sachant que vous aurez une bonne compréhension de la complexité de l'application et des lignes de code nécessaires, vous pourrez ainsi faire une estimation et créer un planning. Il est important d'avoir un calendrier et un délai, sinon vous risquez de ne jamais le terminer.
J'espère que cela aide
la source