My career started in the mid-nineties as one of the early web developers. Web as in HTTP, that is. Netscape Navigator was helping to grow the number of households with internet modems because it was more advanced than anything else at the time. Netscape Navigator 3.0 (1996) and 3.04 (1997) helped households and businesses all over the world open up the internet for common uses. There is no more common a task than shopping! With the advent of ecommerce, the internet exploded with a capitalist gold run.
I started web development in the public sector where we leveraged the first threads of social networking by allowing school district graduates to collaborate with former classmates. I started my career on the Microsoft platform using IDC (Internet Database Connector) with HTX (HTML Extension Template). Internet Information Services (IIS) 2.0 gave us fantastic flexibility using ODBC data sources. This was my first use of the “code nugget,” or delimiters. IDC/HTX gave way to Active Server Pages (ASP), and I can still recall following the changes as they broke–ASP 2.0 to ASP 3.0 as well as the awesome COM+ integration. I dabbled in CGI, Perl, Java, and C++, but stayed with the Microsoft platform. Observing the Visual Basic explosion from the sidelines, I learned the ropes with small utility apps.
Active Server Pages 3.0 saw the browser wars with Internet Explorer 4, released with Windows 95, competing with Netscape for market share. Writing web applications that worked well with both browsers was difficult. IE 5.0 opened the horizons for intranet applications with proprietary web extensions like the XML data island and better scripting capabilities. Windows XP shipped with IE 6, which effortlessly captured the majority of the web browser market. ASP 3.0 put the programmer intimately in touch with HTTP, HTML, and the GET and POST verbs. I remember pulling out crude frameworks to handle multiple request paths from the same ASP script.
At the same time ASP 3.0 was enjoying widespread adoption, Struts was taking the Java web application world by storm. Struts is probably the best known Java MVC framework, although today there are many popular frameworks for the JVM. With ASP 3.0, I was unaware of the lessons my Java counterparts had already learned, although I felt the pain of myriad responsibilities lumped into a single ASP script.
I adopted ASP.NET 1.0 right out of the gate and converted some of my ASP 3.0 sites to Web Forms. Remember when GridLayout was the default with CSS absolute positioning everywhere? It was clear that Web Forms 1.0 was geared for VB6 developers coming over to .NET and getting onto the web. The post-backs and button click handlers were largely foreign to me, but my colleagues who were seasoned VB6ers felt right at home. ASP.NET 1.1 dropped the GridLayout and forced the developer to understand HTML and how flow layout works. Down-level rendering was great when Internet Explorer was the “preferred” browser, and everything else was downlevel. That paradigm started to break down as Firefox climbed in market share and demanded standards-compliant markup.
I became an ASP.NET expert and was a frequent blogger during the .NET 2.0 beta cycle. I knew every feature and every breaking change from ASP.NET 1.1 to 2.0, and helped my team adopt 2.0. During the ASP.NET 2.0 era, I started following Martin Fowler and his Model-View-Presenter writings. I implemented that pattern to pull away logic from the code-behind file, which had become bloated. Java developers, in 2005, were enjoying a choice of several MVC frameworks for the web. I, on the other hand, was wrestling Web Forms into Model-View-Presenter and test-driven development submission. It was exhausting, but what was the alternative?
In 2006, with a job change, I jumped over to software management and smart client development with WinForms. With the familiar clunkiness of the code-behind model, and a development team to manage, I implemented the Model-View-Controller pattern with the WinForm class as the view. It was a breath of fresh air. UI development was seamless, and the controllers were a natural boundary from the domain model to the UI. In 2007, I jumped back into web development and begrudgingly implemented Model-View-Presenter with Web Forms again. In retrospect, I wish I had adopted MonoRail, another Model-View-Controller framework for .NET.
In February 2007, Scott Guthrie (ScottGu) created a prototype of what would become the ASP.NET MVC framework. He had heard from many customers about the difficulties with Web Forms and how they needed a simpler, more flexible way to write web applications. At the 2007 MVP Summit, Scott sought input from a small group of Microsoft MVPs. Darrell Norton, Scott Bellware, Jeremy Miller, and I validated the vision of his prototype and gave initial input that would end up coded into the framework.
When Scott Guthrie presented, to an audience in Austin, Texas, a working prototype and vision for ASP.NET MVC at the AltNetConf open spaces conference in October 2007, I knew instantly that this is what I’d wished for all along. As a long-time web developer, I understood HTTP and HTML, and this, I believe, is what ASP.NET 1.0 should have been. It would have been such a smooth transition from ASP 3.0 to ASP.NET MVC. I can claim the first ASP.NET MVC application in production because I convinced Scott to give me a copy of his prototype and revised my www.partywithpalermo.com registration site, launching it in November 2007 on one of Rod Paddock’s servers at DashPoint.
What Microsoft did with the ASP.NET MVC release cycle was an unprecedented project in the Developer Division. The project was released at least quarterly on the CodePlex site, source code and all. It was also developed using test-driven development as the software construction technique. Full unit test coverage is included in the source code download, and ASP.NET MVC 1.0 was released under the MS-PL, and OSI-approved open source license.
ASP.NET MVC works the way the web works; it’s a natural fit. Although Microsoft is last to the table with a Model-View-Controller framework for its development platform, this framework is a strong player. Its design focuses on the core abstractions first. It is conducive to extension by the community. In fact, the same week the first Community Technology Preview (CTP) was released, Eric Hexter and I launched the MvcContrib open-source project with an initial offering of extensions that integrated with the ASP.NET MVC Framework.
At the time of publishing this book, the ASP.NET MVC framework is a frequently used tool at Headspring Systems, where I facilitate the consulting practice. For the .NET industry as a whole, I predict that ASP.NET MVC will be considered the norm for ASP.NET development by 2011.
New developers are coming to the .NET platform every day, and for web developers, ASP.NET MVC is easy to adopt and learn. Because of the decreased complexity, the barrier to adoption is lowered, and because of the simplicity, it can grow to meet the demands of some of the most complex enterprise systems.
When Manning Publications approached me to write a book on ASP.NET MVC, I was already a frequent blogger on the topic and had published an article on the framework in CoDe magazine. Even so, I knew writing a book would be a tremendous challenge. This book has been in progress for over a year, and I am excited to see it published. I learned quite a bit from Ben and Jimmy throughout this project, and I learned so much more about the framework by writing about it. This knowledge has direct and immediate benefit to our client projects.
Our hope is that our book will stay with you even after you have written your first application. Writing a book published just after a 1.0 release is challenging because many things are discovered after a technology has been out in the wild. Leveraging it on client projects immediately has definitely helped increase the quality of information contained in the book because it is derived from hands-on experience.
Although other platforms have benefited from Model-View-Controller frameworks for many years, the MVC pattern is still foreign to many .NET developers. This book explains how and when to use the framework; also the theory and principles behind the pattern as well as complimentary patterns. We hope that this book will enlighten your understanding of an indispensable technology that’s simple to learn.