[Actualité] .NET Core ou .NET Framework ? Quelle implémentation adopter pour son projet ?
par
, 23/06/2017 à 17h05 (3344 Affichages)
Microsoft avait créé le Framework .NET en 2000 pour offrir aux développeurs une plateforme unique pour le développement d’applications sous son système d’exploitation Windows.
De ce fait, le Framework .NET en plus de prendre en charge plusieurs langages, permet de mettre en place de nombreux types d’applications (WPF, WinForms, ASP.NET WebForms, Azure, etc.).
Autrefois, le développement d’applications était majoritairement dédié aux systèmes d’exploitation pour PC et serveurs. Un marché dont Windows détenait plus de 90 % de part. Le Framework .NET n’avait donc pas besoin de s’étendre à d’autres plateformes pour être compétitif et attirer un large panel de développeurs.
Cependant, l’écosystème IT a évolué. Ce dernier a subi une profonde mutation. Le développement pour les terminaux mobiles, les objets connectés, le Cloud, est de plus en plus plébiscité par les développeurs. Dans ce nouveau marché, les terminaux sous Windows représentent moins de 20 % (d’après des chiffres publiés par Microsoft en 2014, la part de marché de l’OS était évaluée à 14 %).
Il n’est plus question de se cantonner uniquement à Windows. Si Microsoft souhaite que la plateforme .NET et ses langages (en particulier C#, qui est le langage phare de la firme de Redmond) demeurent compétitifs, elle doit s’ouvrir à d’autres écosystèmes.
Microsoft a compris cela. Toutefois, avec de nombreuses API extrêmement liées à Windows, un simple port du Framework .NET n’était pas envisageable. De plus Microsoft ne voulait pas traîner certaines vieilles casseroles de la plateforme.
C’est ainsi que Microsoft a décidé de créer .NET Core. Il s’agit d’un fork open source du Framework .Net bâti sur les bases suivantes : multiplateforme, participation de la communauté, performance, modularité, souplesse, etc.
Avec .NET Core, il existe désormais deux déclinaisons de la plateforme .NET . Chacune disposant de son propre cycle de développement et bénéficiant les deux du support de Microsoft.
Dans le cadre de la mise sur pied d’une application, le développeur .NET sera dorénavant amené à faire un choix. Faut-il utiliser le Framework .NET ou s’orienter vers le nouveau venu .NET Core ? Quels seront les impacts pour mon projet ? Quel est le niveau de compatibilité entre les deux ? Sont autant de questions que doivent être amenés à se poser les développeurs avant d’opter pour une plateforme.
N.B. Avec le rachat de Xamarin par Microsoft, il existe en fait trois implémentations de la plateforme .NET qui sont supportées par la firme, dont Mono pour Xamarin. Je ne vais pas évoquer Xamarin dans ce billet de blog.
Différence fondamentale entre .NET Framework et .NET Core
Contrairement au Framework .NET qui fonctionne uniquement sur Windows ou Windows Server, .NET Core peut être utilisé aussi bien sur Windows que sur Linux et OS X. La conséquence de cette ouverture est le manque de support d’applications qui reposent sur des technologies Microsoft comme WPF, WinForms ou encore ASP.NET WebForms.
.NET Core est développé en open source avec la contribution de la communauté. Ce qui n’est pas le cas pour le Framework .NET. Le code source de .NET Core et sa documentation sont disponibles sur GiHub.
.NET Core implémente de nombreuses API communes avec le Framework .NET. En plus d’API qui sont spécifiques à Unix, Linux et OS X. Les API communes sont regroupées dans .NET Standard, qui est implémenté à la fois par .NET Core et .NET Framework. Ce qui signifie que tout code qui cible .NET Standard, peut s’exécuter sur .NET Core et .NET Framework. Ce qui rend assez simple le partage de code entre les deux plateformes.
Multiplateforme
Il va de soi que si vous développez une application qui devra s’exécuter sur Windows, Linux ou encore OS X, vous devez utiliser .NET Core qui est multiplateforme.
De plus, vous pouvez directement développer votre application en utilisant le système d’exploitation sur lequel cette dernière sera exécutée. Le SDK .NET Core offre de nombreux outils en ligne de commande pouvant être utilisés pour créer, compiler, générer et publier une application .NET Core sous n’importe quel OS.
Pour l’édition de code, Visual Studio Code peut être utilisé. Bien qu’assez éloigné de Visual Studio en termes de fonctionnalités, il a le mérite d’être open source, multiplateforme, léger et offre les fonctionnalités recherchées dans un EDI comme la coloration syntaxique, l’IntelliSence ou encore le débogage. De plus, grâce au projet OmniSharp, les compilateurs pour C# et F#, ainsi que les outils de développement pour .NET Core peuvent s’intégrer avec d’autres éditeurs comme Vim, Atom ou encore Sublime Text.
Performance
Une application ASP.NET Core, par exemple, est dix fois plus rapide que la même application ASP.NET.
Dans un récent billet de blog, Microsoft met en avant les améliorations significatives des performances de .NET Core par rapport au Framework .NET, en ce qui concerne notamment les collections, la compression, la cryptographie, les fonctions mathématiques, la sérialisation, et bien plus.
Cloud et microservices
La modularité de .NET Core permet de publier les applications uniquement avec les bibliothèques qui sont utilisées par l’application. Ce qui réduit de façon drastique la taille d’une application .NET Core. Cela fait donc de la plateforme un client de choix pour les plateformes de cloud et les microservices. Les ressources cloud étant payées à l’utilisation (espace de stockage, CPU, mémoire, etc.), la taille de l’application peut avoir un incident non négligeable sur votre facture.
En microservice, les développeurs pourront mettre en place des petites applications qui s’exécutent side-by side en offrant de meilleures performances qu’avec .NET Framework.
Conteneurs
Docker jouit de nos jours d’une grosse popularité. La plateforme est de plus en plus utilisée par les développeurs pour packager et exécuter leurs applications. Si vous envisagez d’utiliser un conteneur pour exécuter votre application, vous devez choisir .NET Core pour développer cette dernière. Certes il est possible de déployer des applications .NET Framework dans des conteneurs Docker sur Windows, mais la taille de l’image est beaucoup plus importante qu’avec .NET Core et votre image ne pourra être exécutée que sur un hôte Windows.
Une application ASP.NET Core par exemple, est self-hosted, donc ne nécessite d’aucun autre programme supplémentaire pour être exécutée dans un conteneur. De plus, vous pouvez utiliser le serveur Web de votre choix en complément (Apache, NGinx, etc.).
Conclusion
Lorsque vous débutez avec le développement d’une nouvelle application, vous devez initialement, selon moi, envisager d’utiliser .NET Core. La plateforme, bien que jeune, est assez stable et bénéficie de toute l’expérience et les leçons tirées dans la mise en place du Framework .NET.
Pour une application qui nécessite des technologies Windows, notamment WPF, vous devez architecturer votre application de telle sorte que les services de base reposent sur .NET Standard. Ce qui va favoriser le partage de code, si besoin.
Pour les applications existantes sur .NET Framework, Microsoft ne conseille pas le port de celles-ci sur .NET Core. Par contre, si vous voulez étendre les fonctionnalités d’une application existante, vous devez envisager utiliser .NET Core pour développer les nouveaux services.
Globalement, vous devez utiliser le Framework .NET quand :
- vous devez utiliser des technologies .NET qui ne sont pas disponibles avec .NET Core ;
- vous devez utiliser des packages NuGet qui ne sont pas disponibles sur .NET Core ;
- vous devez utiliser une plateforme qui ne supporte pas .NET Core.