Front end first ou Back end first. Des deux, quelle est une bonne pratique de conception de système?

30

J'ai un client qui me demande actuellement de développer un système d'inscription scolaire. C'est la première fois que je rencontre ce genre de défi. La plupart des anciens logiciels que j'ai créés ne sont pas si complexes.

Je sais que la plupart d'entre vous ont créé des logiciels complexes, je veux juste votre avis à ce sujet. Dois-je d'abord concevoir l'extrémité avant ou arrière?

Merci!

Voici la conclusion d'un article que j'ai trouvé sur Internet il y a quelque temps. Je veux juste partager

http://www.skitoy.com/p/front-end-vs-back-end-developers-my-take/157

Développeurs frontaux et back-end (mon avis)

Ma vision personnelle

Encore une fois, c'est une question de formation, quelques généralisations générales de l'AVC:

Développeurs frontaux

  • En règle générale, vous n'avez pas de diplôme CS ou un diplôme CS d'une école de troisième niveau.
  • Travailler dans des langages similaires à ceux de base (voir PHP is Basic)
  • Avoir une compétence visuelle dans la conversion de documents Photoshop en CSS / HTML / etc.
  • Avoir une tolérance élevée pour la programmation itérative, en raison des langages libres de type

Développeurs back-end

  • Avoir un diplôme CS ou beaucoup d'expérience
  • Tendance à moi plus systématique dans leur approche de résolution de problèmes
  • Cela ne vous dérange pas de passer des jours à trouver le seul objet qui fuit
  • Essayez de créer des outils pour résoudre les problèmes
drexsien
la source
2
smh, c'est la raison pour laquelle je dis aux gens que je suis développeur de logiciels vs développeur Web.
suppliez
10
Qu'est-ce que ces généralisations sur les développeurs front et back-end ont à voir avec la question?
Erik Reppen
Front End Dev! = Back End Devs, bien que la plupart du temps, les transitions n / b les continuent.
Abhinav Gauniyal
Je pense que la seule réponse valable ici serait «Cela dépend ...»
Oliver Weiler

Réponses:

43

Si vous commencez à l'arrière et allez de l'avant, vous courez le risque de mal comprendre le client. Comme vous créerez des choses qu'ils ne peuvent pas facilement voir et comprendre, ils ne peuvent pas participer très facilement à la vérification du respect des exigences. Cela signifie que vous pourriez perdre beaucoup de travail.

Si vous commencez par l'avant et que vous reculez, vous courez le risque que le client pense que c'est presque terminé, alors que tout ce que vous avez fait est de dessiner un formulaire simple à l'écran. Ils peuvent alors se demander pourquoi cela prend autant de temps, car vous l'avez surtout terminé en quelques jours. Vous courez également le risque de vous peindre dans un coin, lorsque vous vous rendez compte que vous devez effectuer un travail compliqué pour marier le devant à l'arrière, alors qu'un frontal plus approprié aurait été plus simple.

OMI, vous devriez d'abord travailler dessus. Écrivez l'avant et l'arrière ensemble, pour chaque fonction du système. Cela donne au client une plus grande visibilité des progrès et lui donne la possibilité de dire «non, ce n'est pas ce que je voulais dire», sans vous causer trop de détresse.

Cela dit, s'il s'agit d'un très grand projet dans lequel vous devez considérer le matériel du serveur ou les capacités de tout logiciel sur lequel vous vous appuyez (par exemple, la base de données que vous utilisez), alors vous devriez probablement avoir une bonne réflexion sur cette partie en premier.

Paul Butcher
la source
Je pense que c'est une explication plus concise. Mais serait-il préférable de faire le back-end en premier parce que je pense qu'il est plus facile de créer le front-end si vous avez un back-end bien structuré.
drexsien
3
S'ils pensent que le front-end est tout, vous pourriez mentionner Google ...
l0b0
1
C'est pourquoi vous devez créer une interface graphique maquette que vous montrez au client et dites "Est-ce ce que vous voulez que le programme fasse?", Et une fois que vous avez terminé, jetez-le et commencez à construire le backend.
gablin
1
+1. @andsien: Si vous avez déjà votre avis, pourquoi avez-vous demandé? D'après mon expérience, Paul a raison, le développement axé sur les fonctionnalités est presque toujours la meilleure stratégie.
Doc Brown
3
@andsien: "il est plus facile de créer le front-end si vous avez un back-end bien structuré". À mon humble avis, c'est un malentendu dangereux. Le problème est: vous ne savez pas si votre back-end est bien structuré tant que vous ne l'avez pas utilisé pour créer des fonctionnalités pour le frontend.
sleske
9

Le logiciel a de nombreuses dimensions, par conséquent, un front-vs trop simpliste est une mauvaise question et il est très, très difficile de fournir une réponse sensée et utile.

Une vue est la structure statique des données. Cette vision comporte au moins trois dimensions: les couches architecturales ("front-to-back"), les cas d'utilisation et les acteurs, ainsi que les coûts ou les risques de mise en œuvre.

Une vue est la structure dynamique du traitement. Cette vue comporte également au moins trois dimensions.

Une troisième vue concerne les composants architecturaux, qui tombent naturellement en couches, prennent en charge les cas d'utilisation et présentent des coûts et des risques.

Je pourrais continuer, mais le point est le suivant.

Développeurs frontaux et back-end (mon avis)

Est à peu près le moyen le moins utile pour examiner le problème. Les développeurs réels - et vos opinions à leur sujet - importent très, très peu ici. Ce qui compte

  • Cas d'utilisation et acteurs

  • Modèle de données logique pour prendre en charge ces cas d'utilisation

  • Processus effectué dans le cadre du cas d'utilisation

  • Composants que vous utiliserez pour créer les éléments logiques et de traitement du cas d'utilisation.

C'est pourquoi la plupart des gens disent que vous devez décomposer votre système par histoire d'utilisateur ou cas d'utilisation.

Ne pas faire de généralisations générales sur les personnes qui feront du développement.

S.Lott
la source
7

Ni. De quoi votre application a-t-elle besoin pour pouvoir faire? Assurez-vous que la vanne chaude délivre de l'eau chaude, la vanne froide délivre de l'eau froide, que l'eau coule en premier lieu, que vous pouvez prolonger les tuyaux où vous en avez besoin et ensuite vous soucier de mettre en œuvre la plomberie réelle dans toutes les pièces de la maison ou ce que la maison va ressemblent en fait exactement.

La partie avant est juste un masque avec quelques interrupteurs et leviers. Le back-end est juste une chose qui reçoit des demandes de récupération et de traitement de données. Arrivez à un point où vous pouvez mettre en œuvre rapidement les deux dans n'importe quelle combinaison souhaitée en premier.

Mais quoi que vous fassiez, ne laissez pas la conception de l'un dicter la conception de l'autre. De cette façon, la folie se trouve.

Mettez les outils en place pour permettre à vos développeurs de construire tout ce dont ils ont besoin pour votre client, quel que soit le nombre de fois où ils changent d'avis. Ensuite, construisez-le selon les spécifications et réactivez-le jusqu'à ce que les petits bus soient enfin satisfaits.

De plus, comparer les développeurs frontaux aux développeurs back-end en 2008 remonte à bien des années Web. Pour le plaisir, je voudrais corriger / ajouter quelques choses à ce vieux châtaignier puisque nous l'avons lié dans la question, mais aussi (espérons-le) intégrer quelques conseils dans:

Développeurs frontaux

En règle générale, vous n'avez pas de diplôme CS ou un diplôme CS d'une école de troisième niveau.

Vote à main levée. Combien de personnes titulaires de diplômes CS ont appris les meilleures pratiques en amont? Ou comment ne pas faire de dégâts avec JavaScript? Ou comment gérer les problèmes CSS d'IE6-IE9? L'industrie des manuels scolaires, qui gère le monde universitaire, est trop paresseuse et gonflée pour gérer une technologie en constante évolution, de sorte qu'elle a reçu très peu d'attention «sérieuse» dans les collèges. Cela a été excellent pour les floraisons tardives comme moi.

Travailler dans des langages similaires à ceux de base (voir PHP is Basic)

Parce que PHP est une technologie côté client? Ou parce que JavaScript, qui a été principalement inspiré par Scheme, a plus en commun avec Basic que Visual Basic, qui n'est plus une préoccupation permanente sur le front-end et qui ne l'a jamais vraiment été, mais qui est toujours disponible pour les applications Web back-end .NET? Le blog compare les développeurs web open source autodidactes aux développeurs web diplômés CS utilisant une technologie populaire à ce stade, je pense. Je suis tombé sur insupportable et compétent en parts égales des deux côtés de ce combat particulier, mais il est toujours en train de faire de l'ergot là-bas.

Avoir une compétence visuelle dans la conversion de documents Photoshop en CSS / HTML / etc.

Plus d'attention aux détails que la "compétence visuelle" qui est un peu large. Nous n'avons pas tous des compétences en conception esthétique. Mais oui, la plupart d'entre nous doivent apprendre ce genre de choses au niveau Jr. et il est en fait assez critique pour écrire une bonne interface utilisateur qui n'utilise pas de marteaux JS lorsque les scalpels CSS feront l'affaire.

Avoir une tolérance élevée pour la programmation itérative, en raison des langages libres de type

C'est pourquoi vous voulez que les pièces que j'ai mentionnées plus tôt soient mises en place en premier. Nous passons les boutons enfoncés, vous produisez / récupérez la marchandise. Nous les emballons et les livrons. Il n'y a aucune raison que ces choses soient étroitement liées les unes aux autres. De plus, un typage strict ne devrait pas interférer avec un processus itératif si vous ne craignez pas la POO, ce que la plupart des gens qui aiment se vanter d'une langue n'ayant pas de cours techniquement, en fait, le font généralement. Mais même s'ils pue, le front-end n'a besoin que d'un point d'accès prévisible et vous pouvez faire tout ce que vous voulez sur le back-end tant que vous ne faites pas quelque chose de stupide comme écrire dynamiquement du JavaScript qui n'est pas JSON ou lier étroitement le comportement de back-end réussi à la structure HTML étant "juste ainsi". * toux * java devs * / toux *

Erik Reppen
la source
Mon seul regret est que je ne puisse pas attribuer +1 à votre question plus d'une fois. Il est dommage que j'ai dû faire défiler 2 réponses à cette question pour finalement trouver celle où il est indiqué que demander l'ordre dans lequel le recto et le verso doivent être développés n'est pas la bonne question à poser. Je partage également votre opinion sur le diplôme CS. Et la dernière remarque "floraison tardive".
Shivan Dragon
5

Il n'y a pas de bonne réponse à cela. L'une ou l'autre approche peut être bonne (et mauvaise) dans certaines situations.

Je vous recommande de considérer l'approche TDD, où l'on est conduit par des tests (d'acceptation et unitaires).

Commencez par assembler un squelette du système: l'infrastructure de base, avec la fonctionnalité minimale absolue. C'est juste pour montrer que votre concept fonctionne et que les différents composants peuvent fonctionner ensemble. Cela comprend également une interface utilisateur nue (le cas échéant), juste assez pour faire et / ou montrer quelque chose de minimal.

Ensuite, vous étoffez les détails, fonctionnalité par fonctionnalité : écrivez un test d'acceptation pour une fonctionnalité / un scénario spécifique, faites-le échouer, puis écrivez du code pour le satisfaire. Cela vous fait travailler de l'intérieur vers l'extérieur : le système reçoit un message d'entrée, vous devez donc gérer / convertir ce message, faire quelque chose avec lui, puis propager les résultats vers l'interface utilisateur. Sur le chemin, vous découvrirez les concepts de domaine et les représenterez avec de nouvelles classes, de l'interface utilisateur vers la couche de domaine et vice-versa.

Pour cette approche, une lecture recommandée est Growing Object-Oriented Software, Guided by Tests .

Péter Török
la source
1

API d'abord

Les ingénieurs des deux équipes doivent travailler ensemble sur l'API entre le front-end et le back-end. Ensuite, les deux équipes peuvent commencer à travailler sur la base de l'API conçue. Cela a l'avantage qu'une autre équipe front-end peut également commencer le travail (peut-être mobile, après le client Web) en plus de l'avantage évident que les équipes peuvent commencer à travailler en parallèle.

Combinez avec une approche itérative et devrait ressembler à ceci:

  1. Concevoir une API simple
  2. Les deux équipes développent et testent sur la base de l'API
  3. Test d'intégration
  4. Montrez au client et recevez des commentaires.
  5. Améliorez l'API et répétez.
m3th0dman
la source
0

Commencez par le frontend, mais d'abord, pourquoi ne peuvent-ils pas trouver une application qui existe déjà? Cela donnerait plus d'informations sur ce projet. Ont-ils des exigences uniques ou pensent-ils que vous pouvez construire moins cher?

Obtenez une compréhension complète de leurs attentes en matière de sécurité et de ce que la loi exige. Je ne sais pas de quel type d'école il s'agit, mais les informations sur les élèves nécessitent généralement une certaine confidentialité.

Si les étudiants potentiels saisissent les données sur un site Web, la conception graphique sera plus problématique.

En fonction de leurs demandes, dessinez des maquettes du front-end. Si vous pensez que l'interface utilisateur n'est pas directe, vous devrez peut-être faire quelque chose de fonctionnel, afin qu'ils puissent le voir en action. Ils peuvent voir l'inscription comme un certain type d '«assistant» qui se ramifie dans différentes directions en fonction de la saisie des données.

Ensuite, vous pouvez commencer à obtenir des informations persistantes dans la base de données.

JeffO
la source
1
le problème en commençant par le front-end (basé sur l'expérience) est que lorsque vous oubliez certaines fonctionnalités, cela peut gâcher votre back-end et vous faire tourner en rond en essayant de le réparer
drexsien
1
@andsien - parlez-vous de concevoir ou de construire? Je ne commencerais pas à construire un front-end sans avoir d'abord conçu le backend.
JeffO
ops ma faute je pense à construire ... merci pour ce jeff.
drexsien
0

Oui, j'ai réalisé que l'OP avait demandé il y a quelque temps. Commencez à l'arrière mais MAQUETTEZ l'extrémité avant pour permettre à l'utilisateur de voir ce que vous envisagez. L'avant, pour tout ce qu'il vaut, n'est que les cloches et les sifflets. L'arrière est l'endroit où se trouve l'argent, et une fois que vous avez ce droit, le FE est juste la sauce sur la viande.

Fabasard
la source
Malheureusement, c'est ce que veulent les clients, en général, mais je pense qu'un tel comportement devrait être découragé. Ne les laissez pas accrocher au visuel et restez fidèles à votre apparence de prototype jusqu'à ce qu'ils soient en mesure de vérifier qu'ils obtiennent le comportement de base qu'ils voulaient. Les clients sont souvent incapables de séparer les bonbons pour les yeux des fonctionnalités utiles et ils vous feront perdre beaucoup de temps sur les choses moins importantes uniquement pour vous blâmer lorsque l'application échoue à son intention ultime à long terme.
Erik Reppen
@ErikReppen J'ai eu cette expérience plusieurs fois - je voulais montrer au client "l'utilisateur entrera des données dans un champ de texte" et le client verra "le champ du formulaire aura exactement 400 pixels de large et la page aura un bleu pâle arrière-plan avec le texte Arial 11pt ... "Mais je pense toujours que c'est mieux que de ne jamais faire de démonstration d'un front-end. Sinon, il est possible de construire un système entier qui entre en conflit avec certaines hypothèses non énoncées dans leur cas d'utilisation principal.
octobre
Vous pouvez faire une démonstration d'un frontal mais restez clair et simple. Éloignez-les de la folie exacte de Photoshop, à moins qu'ils ne demandent qu'ils le leur vendent. Et c'est là que réside le problème. C'est ce à quoi ils s'attendent, mais ils sont le plus souvent sacrément stupides pour donner la priorité aux pixels de "fait en fait nos clients faire ce que nous aimerions qu'ils fassent."
Erik Reppen
errr, n'est-ce pas pourquoi nous avons CSS? (bien que je ne ressens votre douleur). J'ai toujours et délibérément un laid, mais fonctionnel, FE & expliquent clairement que nous discutons des cas d'utilisation, du flux de travail ... et que je peux l'affiner plus tard. (mais la vraie réponse est exigences-> base de
données-
0

Développant mon commentaire:

Rassemblez d'abord les exigences, puis transformez-les en cas d'utilisation et en conception.

Vient d'abord une définition détaillée de la base de données. Je me fiche que le client ne le comprenne pas complètement, je le force à s'asseoir et à le regarder - et à le signer (éventuellement en forçant ensuite à se rendre compte qu'une fois que leurs gars plus avertis en technologie devraient le faire) ), avant de procéder.

Comment commencer avec FE, sans BE? FE pour quoi ??? Définissez votre base de données !! C'est ce que manipule le FE.

Ok, il y aura des problèmes et des ajustements ultérieurs, et je ne conviens qu'il est bon d'obtenir un simple exemple, l' interface graphique en face du client le plus tôt possible, car cette pointe particulière de l'iceberg est ce que la plupart comprennent plus.

Cependant, je 1) souligne qu'il ne s'agit que d'une maquette grossière, pour les marsouins de discussion, et 2) que c'est délibérément laid, mais fonctionnel , afin que ceux qui ne comprennent pas puissent me taquiner et me dire de faire cette boîte de saisie exactement 400 pixels. large et le fond bleu clair.

Je suis tombé que la plupart des réponses ici (et je les ai suivies) ont tendance à trop se concentrer sur le client, mais, d'un point de vue purement et simplement, je soutiens que vous ne pouvez pas concevoir un FE pour manipuler un BE sans d'abord la conception de ce BE.

Mawg
la source
"vous ne pouvez pas concevoir un FE pour manipuler un BE sans avoir d'abord conçu ce BE". Oh oui, vous pouvez - cela s'appelle un "prototype". Cela peut être une première étape précieuse lors du démarrage d'un nouveau système.
sleske
qu'est-ce que le prototypage? Pas de guerre des flammes, ça vient de me venir à l'esprit. Je comprends ce qu'est un prototype, mais peut-être parce que je viens d'un domaine différent, je le vois toujours comme: obtenir les exigences, les transformer en cas d'utilisation et en conception. Si vous n'avez pas cloué votre d / b, vous ferez beaucoup de retouches inutiles, alors triez-le d'abord, puis découvrez comment le manipuler (conformément aux exigences). YMMV ... suite ...
Mawg
Ce n'est sans doute pas en noir et blanc, sinon la question n'aurait pas été posée, mais BE d'abord, toujours, OMI. En fait, j'en fais un de cette façon en ce moment pour les clients qui n'ont qu'un vague sentiment flou à la place des exigences (je n'aurais jamais dû les toucher, mais c'est une toute autre histoire :-)
Mawg
1
D'après mon expérience, les besoins des utilisateurs doivent venir en premier et l'architecture doit suivre. Mais bien sûr, cela dépend des détails techniques, certaines choses sont en effet difficiles à changer plus tard. Au moins, il est important d'être conscient des compromis.
sleske
Je soupçonne que nous pourrions dire la même chose de différentes manières (+1)
Mawg