web-dev-qa-db-fra.com

Programmation PHP sans MVC, classes ou cadre: réécrire ou continuer sur de nouvelles fonctionnalités?

Je suis programmée depuis plusieurs années maintenant et à l'époque (apprendre PHP), je n'ai pas appris à programmer à l'aide de classes, de la logique MVC ou d'utiliser des cadres. J'ai trouvé mon auto résolution mes problèmes très bien en utilisant mes propres fonctions.

Il y a huit mois, j'ai été recruté à une start-up, pour développer une énorme plate-forme sociale. Je travaille là-bas depuis plusieurs mois maintenant et j'ai construit un énorme site Web avec diverses fonctionnalités compliquées (+ 35K lignes de code, je suppose), et je pouvais me voir continuer à continuer comme ça. Tout est codé sans aucun cadre, pas de cours ni avec la logique MVC, car je n'avais pas le temps de l'apprendre (nous avons dû aller vite).

J'écris tout dans les fonctions et pose beaucoup d'efforts en documentant/décrivant mon code ainsi que de l'organiser joliment et facile à lire.

Cependant, il est haut de ma liste pour apprendre des cours> mvc> Laravel (ou tout autre cadre). Mais je ne peux tout simplement pas voir mon auto-arrêt maintenant, Apprendre au-dessus de la liste, puis réécrire tout code. Cela nous repousserait simplement dans le temps et, dans le démarrage, nous nous déplaçons rapidement et avons de nombreuses échéances pour de nouvelles caractéristiques/idées/développement.

J'ai parlé avec beaucoup de gens à ce sujet, et les gens disent beaucoup de choses différentes. Certains disent que c'est une question de goût, et vous pourrez passer à autre chose avec elle. D'autres disent que c'est incroyablement stupide, vous n'êtes pas évolutif, vous n'obtenez jamais de grave financement, vous êtes le seul à pouvoir travailler sur le projet, vous devriez arrêter et commencer à l'apprendre maintenant, etc.

Suis-je condamné? Je me sens perdu. Mon opinion personnelle à ce sujet est que même si c'est un système énorme déjà, c'est toujours un MVP et je suppose qu'à un moment donné à l'avenir, nous réécrivions le code de toute façon. C'est-à-dire que nous sommes à une étape aussi réussie dans notre entreprise et de grandir très vite/à obtenir un financement/etc.

6
user115464

Apprendre OOP est certainement la peine. Les promoteurs locaux passionnés sont toujours disposés à apprendre à élargir leurs connaissances, spécialement lorsque vous pouvez gagner du temps à long terme. Je serais plus d'accord avec le deuxième groupe de personnes :

D'autres disent que c'est incroyablement stupide, vous n'êtes pas évolutif, vous n'obtenez jamais de grave financement, vous êtes le seul à pouvoir travailler sur le projet, vous devriez arrêter et commencer à l'apprendre maintenant, etc.

C'est un peu dur, mais la réalité est, plus vous savez, plus vous échouez. Un financement sérieux est souvent entouré d'un battage médiatique et de code de procédure n'est malheureusement pas assez cool. OOP et les cadres sont.

Suis-je condamné? Je me sens perdu. Mon opinion personnelle à ce sujet est que, même si c'est un système énorme déjà, c'est toujours un MVP et je suppose qu'à un moment donné à l'avenir, nous réécrivions le code de toute façon [...]

De grandes bases de code procédurales ne sont pas rares, voir WordPress. =OOP aide vraiment à résumer et à organiser votre code sans s'appuyer sur des conventions procédurales (bien que des cadres de MVC aient un ensemble de conventions totales). WordPress a commencé un processus de migration , cela se passe toujours aujourd'hui. Avec de tels projets importants, tout ce que vous pouvez faire est de mettre à niveau votre système, étape par étape, de tester que rien ne se casse et de continuer à satisfaire, éternellement, car vous introduisiez de nouvelles fonctionnalités qui auront besoin de nouvelles fonctionnalités plus tard. .

Mais non, vous n'êtes pas condamné, juste un peu tard dans l'ensemble du processus. Apprenez ce que vous pouvez quand vous pouvez; moins vaut mieux que rien. La courbe d'apprentissage lors de l'apprentissage de nouveaux paradigmes de programmation, ou des langues, est souvent raide au début, mais après ce premier hoquet, il s'agira de naviguer en douceur et vous commencerez à apprécier vraiment la différence de votre code et de la différence. Cela fera quand les autres lisent votre code.

Edit : Juste pour clarifier, je ne suggère pas que le système actuel doit être utilisé ou qu'il doit être construit à partir de zéro. Tout système va être retégré, à un moment donné, et vous devrez peut-être casser la compatibilité avec le système précédent, et c'est bien si le projet le requiert; Vous pouvez également avoir un cycle de dépréciation. Ce que je suggère, c'est d'introduire lentement OOP lorsque vous refactez votre code actuel, vos espaces de noms, etc.

3
elclanrs

(déplacé du débordement de pile suivant fermeture de questions ) .

Je pense que cela dépend. Si le code est déjà modulaire et que le balisage/la logique est bien séparé, il peut être préférable de ne pas porter à un système complètement différent. Vous devez envisager l'impact sur l'activité existante et si la prise de DevS de nouveaux projets de fonctionnalités en vaut la peine dans votre cas.

Un meilleur moyen de le faire peut être de trouver une bibliothèque boulonnée qui sépare la logique à partir du code et utilisez-la initialement uniquement pour votre nouveau code. Ensuite, comme vous trouvez le temps, commencez à porter vos anciens écrans et obtenez-en chacun des vibrations lorsque vous le terminez. Le résultat est alors que vous améliorez de manière itérative, plutôt que d'essayer de le faire dans un "big bang" et est donc moins risqué.

Je travaille sur un grand PHP où il a été assez difficile de faire une carte de visite pour passer à un système de type MVC décent. Nous aimerions, mais ce serait 6-12 Des mois de travail de développement, et bien que j'ai tendance à considérer personnellement le coût/la prestation favorablement, le client ne le fait pas, et bien sûr des clients/gestionnaires qui prennent ces décisions!

La solution dans mon cas a été d'écrire un système de contrôleur à base d'objet de manière triviale que nous avons tendance à utiliser pour un nouveau développement à l'avenir. Ce n'est pas aussi beau que Symfony2 ou Laravel, mais c'est une étape importante vers la modularité et la maintenabilité, et c'est assez bon.

Tout cela dit, si vous n'utilisez pas d'objets du tout, je dirais que cela était assez inhabituel. Ils constituent un mécanisme très naturel et utile pour organiser votre application et suggéreraient que cela devrait être votre premier port d'appel lorsque vous décidez comment améliorer votre codeBase.

1
halfer

Réécrire un grand système tel que le vôtre Juste pour organiser le code dans les classes au début ne semble pas trop mauvais, mais à moins que vous ne soyez récompensé pour vos efforts d'avant d'avoir un système qui a beaucoup moins de bugs, est plus facile à prolonger, Plus optimal et ainsi de suite, je dirais que votre temps est mieux dépensé pour penser à écrire des extensions à votre application à l'aide de classes à tout le plus.

Il est vrai que la plupart des cadres et de grandes applications favorisent l'organisation du code de l'OPO, mais ce n'est certainement pas une exigence. Après avoir appris à aimer les langages de programmation fonctionnelle, en particulier OCAML, je pense personnellement que les classes sont inférieures aux fonctions et que PHP offre une meilleure utilisation des fonctions et des fermetures, il n'y a vraiment aucune raison d'utiliser des classes du tout. Cela peut être blasphème pour la plupart, mais je crois que c'est le cas.

Les cours ont leurs utilisations mais ils ne sont pas une nécessité. Regardons quelques cas d'utilisation où l'utilisation traditionnelle des classes et leurs équivalents, à savoir des méthodes et des cas statiques.

  1. Méthodes statiques.

    À l'aide d'espaces de noms, il est plus que possible d'avoir la même fonctionnalité qu'un procédé de classe statique, et il est possible de disposer de différentes méthodes espacées de noms de noms à des fichiers différents, sans doute beaucoup plus flexibles et extensibles.

  2. État d'instance.

    Une instance d'une classe contient son propre état interne. Cela a toujours été construit comme l'un des avantages de l'utilisation de OOP. Il est également viable d'utiliser des fermetures pour faire la même chose que de même et a été utilisée avec succès dans de nombreuses autres langues à un grand succès.

Donc, mon conseil est de garder la flambée du sentier. Vous pouvez moi reconnaissant avec le temps car les gens commencent à migrer vers votre style de codage.

0
Lloyd Moore