What are the key strengths of ASP.NET Webforms (2.0-3.5)? I'm not looking for comparisons to other frameworks, I'm just am looking for feedback on ASP.NET as it stands today.
I think the component model is the key thing and ease to use parts of other web pages as components (via User Controls) are the key advantages.
It lets you build web applications without having a good understanding of the underlying concepts such as HTTP. This has its own downsides.
The key strengths of ASP.Net are:
- Compiled code - performance
- Multiple language development
- XCopy Deployment
- Visual Studio Design-time Integration and Expression Web
- Many 3rd party controls, both open-sourced and commercial
- Easy to learn for beginners
- State Management
- Low learning curve to get started on something simple (However becomes complicated quickly as soon as you have a page with dynamically added elements).
- Huge library of mature controls
- Huge amount of documentation and resources
- Great performance
Despite what other people may have said, it's possible to keep things from turning into a complete mess.
One key strength (to some) is a drag-and-drop development environment integrated into Visual Studio. This allows you to get simple things up and running quickly, but can also be a liability when the time comes that you actually need to understand the underlying code.
Benefits of Webforms
- Event Driven
- Stateful
- Easily develop reusable controls
Misconceptions of Webforms
- Its not easy to test
- Its very easy to test if you architect your code properly
- The controls generated HTML is bad
- Not anymore, there are CSS Friendly Control Adapters
Overall ASP.NET webforms is a great development model and most of the downfalls that people complain about are misconceptions or poor design/architecture. The most important feature is with the Lifecycle/statefulness of webforms you have the flexibility to develop very easy to use and reusable controls.
I think that another good point about ASP.NET is the wide support from the community. There are really lots of people using ASP.NET. There aren't many open source projects in ASP.NET but (probably) because people use it rather for the business apps then for hobby. However they are really helpful!
I also like the "addins" like (great!) MVC and AJAX Toolkit :)
Relatively fast construction of web applications, but relatively hard to maintain.
Relatively easy to learn. You don`t need to know html, css and javascript. However if you already know html, css and javascript other web development technologies might be easier to learn.
It's relatively easy to adopt asp.net web forms if you come from different technologies, because it doesn't require a strict methodology to be effective and because it supports multiple languages.
It's a relatively mature technology.
It's relatively easy to add new functionality to a web application, but it's relatively hard to change existing functionality while maintaining good quality of code.
Easy integration with windows applications, because it's event driven.
Many third party libraries available.
Relatively easy to deal with application state.
Relatively easy to deploy.
Platform independence (I do not have any experience with this, so I don`t know if this is true)
HOWEVER:
In theory it has good performance, but in practice it doesn't. Compiled code does not lead to better performance, because this is not the bottleneck in a web application. The bottlenecks are the amount of html that is send to the browser, how fast it can do string operations and the speed at which the database can be queried. It is one of the worst products on the market when it comes to these points.
Fast construction of web applications can be an advantage in simple applications or innovative projects where rival companies are developing a similar product, but in the majority of the time application maintainability is much more important than construction time.
Development in multiple languages is a disadvantage, because some third party components will only be available in one language and if you happen to need this it will require you to learn two languages instead of just one. C# and VB.Net are for 99% the same, they just use different words, but the syntax is pretty much identical. When developing in a team there will always be people preferring one over the other and developing one product in two languages only makes things confusing, so one language has to be chosen and the team members who disagree with this choice will start the project with a bad morale which will have a bad effect on your project eventually. The only one who really benefits from the multiple language support is Microsoft.
The state-full nature of web forms is a disadvantage compared to stateless systems, because it will lead to many problems. External websites or bookmarks will not be able to link to all content directly as some content will only be available after performing a couple of user actions, so instead of linking directly to www.example.com/a/b?c=d the website will have to link to www.example.com/a/b and give the user some instructions on how to get to the referenced content. Most search engines will not be able to find most of the content. Using the back button in a browser can lead to errors. Connectivity problems or hibernation of the client can lead to errors. It can not take advantage of proxies which leads to bad performance in some cases. Proxies, gateways and cache can cause errors. Surfing the website while the website is updated causes errors.
I agree with sontek on that it can be easy to test if architected in the right way, but I disagree with sontek on that this is an advantage of web forms. Because in software architecture every advantage you create by architecture will also lead to a disadvantage. In this case it will lead to a disadvantage in construction time which is pretty much the main strength of web forms, so if you want a testable system it doesn`t make sense to use web forms, because then you can better use MVC or something like that.