Pros & Cons Of .Net
.NET is a software development framework designed and supported by Microsoft to allow for easy desktop and web application engineering. It’s a popular free platform currently used different types of applications as it provides a programming environment for most software development phases. .NET best suits the businesses that look for a wide range of features like web-based services, desktop software, and cloud infrastructure support.
Microsoft started working on .NET framework in the late 90’s. Since then, this tool has undergone a great transformation and now is accompanied by a rich ecosystem.
.NET development platform
The .NET comes in three forms: .NET Framework, .NET Core, and Xamarin. These implementations combined are called .NET development platforms. Each of them contains frameworks and libraries to build various applications.
The .NET Framework is the first and the oldest implementation of the platform. It includes three main application models – WPF, Windows Forms, ASP.NET Forms – and Base Class Library.
Windows Presentation Foundation (WPF)
This is a UI framework used for creating graphical interfaces for desktop client applications on Windows OS. WPF uses the capabilities of Extensible Application Markup Language (XAML).
It's a GUI class library within .NET Framework. Windows Forms are used to develop desktop applications with rich graphics that are easy to update and deploy.
While the previous two components are designed for desktop engineering, ASP.NET is used to develop dynamic websites and web applications. There is the Common Language Runtime (CLR) in its core that gives the opportunity for developers to write ASP.NET code using different .NET languages. Common Language Runtime is an application virtual machine that manages memory, implements code access security, verifies code safety, and provides execution of threads and code.
Base Class Library (BCL) provides the most common functionality like classes in namespaces and is the core of the Framework Class Library (FCL), a set of reusable interfaces, classes, and value types that are integrated with the Common Language Runtime (CLR). The combination of FCL and CLR constitute the .NET Framework.
.NET Core was released in 2016. It’s a cross-platform re-build of .NET Framework. Unlike the old version, engineers can now use the product on Linux and OS X and create applications that aren’t tied to the Windows family. The new system aims at conquering the cloud space as some providers like Digital Ocean are Linux-driven. Not only .NET Core is cross-platform, its different versions can be installed side-by-side on the same device.
Universal Windows Platform (UWP)
It is an API created by Microsoft and used to develop the universal apps that run across all compatible Microsoft Windows devices, i.e. Windows, Windows Phone, and HoloLens.<
It is a re-build of ASP.NET that happened to be a more modular framework than its predecessor. ASP.NET Core allows you to build mobile backend, web apps and services. It’s also cross-platform and runs on OS X, Windows, and Linux.
The third implementation is called Xamarin and is used for mobile applications and Mac products. Originally, Xamarin was designed independently from Microsoft and was a proprietary product until Microsoft acquired it in 2016 making a fully open source branch of the .NET platform. Xamarin uses the Mono runtime and a version of the .NET Framework adjusted to work with APIs for iOS, Android, and Xamarin.Mac. All runtimes use a common infrastructure that makes the entire ecosystem work. It provides runtime components, languages, and compilers.
In 2016 Microsoft also introduced .NET Standard, a library that combines APIs from .NET Framework, .NET Core, and Xamarin allowing engineers to use a single base class library rather than mastering three different ones related to each .NET implementation. This step unified the ecosystem and brought a higher consistency into reusing components across different platforms.
.NET development platform is best served with Visual Studio IDE used for building, debugging, and publishing applications across all platforms and devices.
Pros of .NET development
Object-oriented software development model
.NET is based on the object-oriented programming (OOP). OOP is a development model with the idea of breaking down software into smaller pieces that are easier to manage and combine. OOP compartmentalises data into objects, i.e. data fields, and describes objects behaviour and contents through the declaration of classes.
A modular structure helps define behaviour of objects and their interactions without managing object inner attributes. OOP simplifies programming by making the code manageable, easier to test, and respond to recurring issues. It also eliminates unnecessary programming and generally means less coding for developers. .NET makes it possible to reuse code and components, save time and – subsequently – the cost of development.
Reliable and simple caching system
Caching means keeping data in a temporary storage place to call it faster when needed. The stored data is the result of an earlier information request or the duplicate of information stored in other places that would take longer to retrieve from.
The caching system in .NET is robust and simple to use. It’s also designed to be extensible. The Object Cache class allows developers to create a custom cache implementation to be used for improving performance and scalability of Windows client and server applications.
Visual Studio IDE
An Integrated Development Environment (IDE) is a single product for programmers which makes application development easier by providing all tools to write and test software.
Visual Studio is a Microsoft IDE used for building, debugging, and publishing applications across all platforms, including Android and iOS. The Visual Studio is integrated with .NET and provides the features of language-specific environment.
- It’s used as a single IDE for all .NET applications
- The IDE has integrated compilation and debugging features
- The solution can be used for applications based on code written in different languages
- The Visual Studio allows for customising the environment to match user preferences
The key features of the Visual Studio IDE:
On top of that, Visual Studio Marketplace offers a wide range of editor extensions from Microsoft and other providers to enable team collaboration, continuous integration, third-party connections, cloud development management, etc.
Cross-platform design and language independence of .NET Core
.NET Core is a cross-platform .NET implementation that allows the code to run on OS X, Windows, and Linux. Unlike the original .NET framework – which is only partly open – .NET Core has a fully open source code which ensures that a wide engineering community can continuously contribute to its development.
If you’re writing in C#, F#, or Visual Basic, your code will run on each of the compatible operating systems. This enables companies to reach the widest variety of platforms staying within the .NET ecosystem. At the same time, cross-platform design and language independence ensure that the whole .NET community with a large pool of different engineering skillsets shares experience. Currently, .NET supports more than 25 languages including C#, Visual Basic.NET, J#, Managed C++, IronPython, and IronRuby.
Flexible deployment and easy maintenance
One of the important .NET Core features is flexible deployment. It can be installed as a part of your application or require a separate installation. The modular design allows for including all the dependencies you need. The deployment itself is as easy as copying a folder.
Another benefit is that you can have multiple .NET Core versions running side-by-side on the same machine to cover different projects and seamlessly perform deployment tasks.
Universal .NET Standard
Since 2016, the .NET ecosystem was enhanced with a large class library called .NET Standard. It’s based on the number of base class libraries for .NET Framework, .NET Core, and Xamarin. These are used to work with common functions such as graphics rendering, database interaction, and manipulations with XML documents. The .NET Standard library greatly simplified developer’s work.
Prior to .NET Standard, a programmer had to redevelop an application or a library for the new platform and then distribute all the updates across various platforms. Currently, the library supports all dependent libraries across applications. However, you should check version compatibility to successfully leverage .NET Standard.
.NET has a large community of developers. Interestingly, it unites engineers from small, midsize, and enterprise-grade companies. This means that almost any issues can be solved with the help of community members.
Since .NET Core is open source, its libraries, runtime, and compiler are available on GitHub and have many contributions. According to Stack Overflow 2018 survey, two .NET products are in the shortlist of the most popular technologies: .NET Core is on the fourth place and Xamarin took the ninth.
On top of that, there is an independent organisation called .NET Foundation that fosters open development and teamwork around the .NET ecosystem. .NET community and commercial developers use it as the main forum for idea exchange.
Automatic monitoring in ASP.NET
ASP.NET has built-in automatic monitoring. The Windows Web Server strictly monitors web pages and applications that run on it. In case any issues such as the memory leaks or infinite loops occur, it immediately alerts about them. This allows for directly correcting these behaviours and creating new processes. The monitoring ensures higher stability and transparency of .NET applications.
Disadvantages of .NET development
Even though .NET is considered one of the strongest engineering platforms out there due to an extensive infrastructure and proven product development history, it comes with a set of problems.
Limited Object-Relational Support
As we mentioned above, .NET uses the object-oriented programming (OOP) language model. This model is based around the objects rather than “actions” and data rather than logic. The support of data-oriented software application development in .NET Framework is provided by the Entity Framework.
Entity is an object-relational mapper (ORM) that bridges between the object-oriented .NET Framework and relational (SQL) databases. Some engineers consider that Entity Framework isn’t flexible enough and may not support all available database designs. This also means that there’s a chance that at some point Entity Framework may not be supporting new database designs. Another problem is that the framework may eventually become abandoned by Microsoft, which will force you to accommodate some new technology that the vendor suggests instead.
On the bright side, we haven’t encountered the problems with Entity yet, so it remains a debatable point.
The second drawback is partly connected with the previous one. .NET is run and based on Microsoft. While .NET Core and Xamarin are open source, the whole ecosystem is far from being the community-driven. This means that your products still depend on the supplier and decisions made by Microsoft.
Building .NET apps isn’t cheap regardless of open source technologies. Mostly, your expenses will be spent on Visual Studio IDE and other additional collaboration and quality assurance services that Microsoft offers to simplify you work. As of today, the base version of Visual Studio will cost you $539/year for one engineer. An enterprise release that includes various cloud, enterprise mobility, QA features and more will be about $3000 per year. However, you still can try to become Microsoft Partner to have a number of subscriptions for free. For non-profit and educational purposes there is also free Visual Studio Community.
Even though you can use .NET Core on Mac and Linux machines, the best way is to use Windows for .NET engineering which also comes with licensing costs.
The barrier will be even higher if you’ve never used Microsoft products before and you have to migrate from say AWS cloud ecosystem to Azure.
The Gap Between Release And Stability
Perhaps, this problem cripples all Microsoft products rather than .NET stack only. But it’s definitely worth mentioning. The newly released products lack proper documentation, support, stability, and are prone to drastic changes. In one of AltexSoft projects, our architects decided to use a fresh DocumentDB (now Azure Cosmos DB) but then were forced to design custom data architecture as the product suffered a number of technical issues that could jeopardise the entire project.
Minor disadvantages include performance issues that occur due to garbage collection in closed systems. And, generally, managed environments are slower that those that communicate directly with hardware.
When To Use .NET
Usually, the business needs are growing and your software has to scale with it. .NET provides scalable environment and allows for redesigning ongoing applications in order to match with the growing needs of the business.
In case you need the app that will work across platforms .NET will be the great choice as most platforms are covered and you can reduce development effort while expanding your desktop or mobile app to other operating systems. On top of that, .NET can be used for such specific engineering cases as gaming (including Xbox) and AR development (including HoloLens).
It’s still a debatable point whether .NET is designed mostly for enterprise use. But Microsoft makes sure to provide the widest toolset possible to build and cross-integrate enterprise products, both internal and public ones. It also supports a robust enterprise mobility ecosystem.