Salutations collègue!
Environ un an avant la rédaction de cet article, j'avais l'impression que je commençais à m'épuiser. Le travail, qui est depuis longtemps devenu un métier, a cessé d'apporter ce sentiment d'étudiant de pionnier, familier à chaque programmeur, apportant l'euphorie. Par souci de ce sentiment, par souci de nouvelles connaissances, je me suis assis une fois devant le moniteur pendant 18 heures par jour. C'est parti depuis longtemps ... mais récemment j'ai ressenti ce sentiment à nouveau! Au début, c'était calme, inhabituel en raison d'une longue pause, mais avec le temps, il s'est enflammé et a pris feu!
Si vous êtes le même que moi, un programmeur avec une expérience d'environ 12 ans, environ 30 ans, persistant dans votre propre stalle (surtout s'il s'agit de C # .Net MVC), alors je vous invite sous cat. Pour ceux qui sont plus jeunes, je pense qu'il sera également utile d'être prêt à l'avance.
Le contexte commence par le fait que je développe depuis longtemps sur la pile C # .Net (ASP, MVC, services Windows). Il me semble que je peux être appelé quelque chose comme un développeur full-stack: bases de données, backend, frontend et même programmation Olympiad - j'ai passé tout cela par moi-même. Je ne dirai pas que je suis un professionnel, mais il est difficile de me surprendre avec quelque chose quand il s'agit de .Net. Non, je n'ai pas assisté aux conférences .next et autres, mais j'ai étudié avec plusieurs anciens à l'université, j'en connais personnellement certains, et le nombre de projets de moyenne envergure que j'ai lancés en PE a dépassé 30.
Comme il était indiqué avant le kata, il me semblait que je brûle. Lorsqu'un nouveau projet nous a été présenté pour la mise en œuvre (pas trop gros - c'est important!), Déjà à la première réunion, je savais ce que nous allions faire et comment - ennuyeux.
Vous ne vous reconnaissez pas encore? Si vous êtes plus jeune, assurez-vous de continuer à lire, vous avez tout devant vous. Si vous êtes allé plus loin que moi, continuez à lire, et dans les commentaires, parlez-nous de votre expérience.
Donc, j'avais environ six mois de travail inintéressant devant moi. Mais nous avons terminé le projet quelques mois plus tôt, appris un tas de choses les plus cool, pompé dans des domaines connexes et nous nous sommes beaucoup amusés! Je ne tarderai pas ... le nouveau projet a été réalisé sur une toute nouvelle pile: Node.js + React.
Les collègues, prévoyant le hap-hack, devraient immédiatement faire une réserve que la décision de changer la pile n'est pas venue spontanément. Depuis plusieurs mois, je porte l'idée que .Net MVC n'est pas le meilleur choix pour les petits projets. Je cherchais des alternatives, je regardais autour de moi. A propos de la combinaison de Node.js et de React, je pensais que ce sont des outils plus affûtés côté serveur et côté client que C #, mais déjà la première expérience a dépassé toutes mes attentes.
Précisons les règles
Tout d'abord, je considère qu'il est nécessaire de clarifier certains détails et conditions dans lesquels l'idée clé de l'article - remplacer la pile .Net MVC et Node.JS + React - peut être considérée comme correcte. Je ne suis pas enclin à aller aux extrêmes et à soutenir qu'un tel événement sera utile dans tous les cas, voici donc une courte liste des restrictions initiales:
- Projets impliquant jusqu'à 3 à 5 programmeurs;
- Manque de calculs essentiels et logique complexe dans le backend;
- Disponibilité et / ou besoin d'unifier le backend et le frontend;
Projets impliquant jusqu'à 3 à 5 programmeurs
Cette limitation est due à l'hypothèse que lorsqu'une grande équipe de 5 personnes ou plus participe à un projet, nous parlons d'applications d'entreprise sérieuses qui seraient difficiles à implémenter sans les avantages de .Net (et pas seulement ASP.NET, mais aussi Core). Nous parlerons des avantages et des inconvénients eux-mêmes ci-dessous.
Manque de calcul essentiel et logique complexe dans le backend
Utiliser JavaScript (ou même TypeScript, ça ne vous sauvera pas), un langage à typage dynamique sans multithreading et sans Linq, pour implémenter des calculs ou une logique métier plus ou moins complexe, est tout simplement impossible - le langage n'est tout simplement pas conçu pour cela. On ne peut pas en dire autant de C #. Il est important de prendre en compte les spécificités de l'instrument afin de ne pas marteler les clous avec un microscope.
Disponibilité et / ou besoin d'unifier le backend et le frontend
L'unification aidera à réduire les barrières à l'entrée, les budgets et les délais. Mais le bâton a toujours deux extrémités, et un pas téméraire de la part de «gestionnaires efficaces» sans réel besoin peut entraîner des pertes.
Avec ces limites à l'esprit, je suggère la liste de contrôle suivante, en passant par laquelle vous pouvez évaluer l'applicabilité à votre écosystème de projets.
Liste de contrôle
Coût de développement et de maintenance
Votre budget nécessite-t-il une faible barre de talents et un faible coût de possession?
Si vous avez une petite entreprise ou une équipe de programmeurs, la complexité des outils de développement occupe de précieuses ressources. La pile Node.js + React présente un certain nombre d'avantages distincts par rapport à .Net MVC ou Core:
- Unification du backend et du frontend - les spécialistes pourront travailler comme une pile complète plus facilement et plus simplement que s'il s'agissait d'une pile C #;
- Moins de besoins en ressources serveur - Node.js n'est pas aussi glouton que .Net et est vraiment multiplateforme;
- La vitesse de développement est plus élevée - en raison du manque de frappe, le taux de publication des premières versions du produit augmente considérablement.
Lancement de MVP (produit minimum viable) et PoC (preuve de concept)
Vos dates limites sont-elles pour un lancement MVP ou PoC?
En termes de vitesse d'implémentation MVP ou PoC, la pile Node.js + React est sans aucun doute dans une meilleure position que la pile .Net. Compte tenu du point précédent sur le coût de développement et de contenu, une synergie apparaît pour la tâche de lancement d'un MVP: rapide, bon marché, efficace. De plus, la stabilité de Node.js est à un niveau élevé et n'est pas satisfaisante.
Environnement de développement
La fonctionnalité des IDE «légers» vous suffira-t-elle?
Les IDE légers sont parfaits pour Node.js en conjonction avec React. Par exemple, VS Code ne nécessite pas beaucoup de puissance de développement, un éditeur multiplateforme, distribué gratuitement, ses fonctionnalités sont tout à fait suffisantes pour développer confortablement à la fois le backend et le frontend.
Pour les projets en C #, vous pouvez utiliser Visual Studio Community - également un IDE shareware, mais il nécessitera déjà des ressources, ne sera pas aussi rapide et non multiplateforme.
Typage de la langue
Pouvez-vous fournir un développement et un support de haute qualité pour votre projet, compte tenu du manque de frappe?
Le manque de saisie dans une langue est une arme à double tranchant. D'une part, cette approche permet de multiplier la vitesse de développement en réduisant la quantité de code. En revanche, le volume des tests se multiplie. De plus, certaines erreurs peuvent apparaître uniquement pendant le fonctionnement, après avoir réussi tous les tests. Il devient difficile de faire de gros projets sans taper.
Performance et évolutivité
Êtes-vous prêt à abandonner le multithreading complet hors de la boîte? Votre projet manque-t-il de calculs complexes ou de logique métier?
Comme vous le savez, Node.js implémente un modèle événementiel à thread unique. Ceci est idéal pour un grand nombre de requêtes, mais il n'est absolument pas adapté à la parallélisation des calculs ou à l'implémentation d'une logique métier complexe. Ainsi, lors du choix d'une pile pour un backend sur Node.js, il faut être conscient des nuances de son travail.
Multiplateforme
Besoin d'une plateforme multiplateforme prête à l'emploi?
Oui, sous .Net, il y a .Net Core, qui prétend être multiplateforme. Mais ce n'est toujours pas .Net MVC. Si vous avez assemblé une grande quantité de composants prêts à l'emploi pour .Net MVC, la transition vers .Net Core ne sera pas facile. En utilisant Node.js, vous n'avez pas à vous en soucier et utilisez vos développements pour n'importe quelle plate-forme, en fonction des besoins du client.
Conclusion
Le monde riche des modules Node.js vous permettra de mettre en œuvre de manière efficace et rentable presque toutes les tâches d'application, des autorisations dans les systèmes d'entreprise et rest-api aux robots de messagerie.
Déployer des applications Node.js sur n'importe quel système d'exploitation est un plaisir et quelques commandes. Et le besoin de capacité de serveur peut être réduit d'un ordre de grandeur par rapport à .Net, et vous pouvez en toute sécurité choisir «payer pour les ressources» dans notre configurateur de serveur dédié.
Avez-vous essayé de changer la pile?