Until now, we have been inundated with a melee of material in the areas of software architecture, design, and "professional" principles. The need for design material seems to be always at its peak when either a new language or technology appears in the market. When Java first entered the market, you could hear the squalls of developers as they flooded into the local bookstores to pick up the latest copy of Learn Java in 10 Minutes . Not only was Java a new language but it was also a new platform, and it was the language for developing rich Internet applications. Not only were developers challenged with a new syntax but they also had to learn the new semantics of this new development medium. For those new to object-oriented technologies, it meant an even greater learning curve. Everything in Java is an object, and it takes another level of discipline to design robust and reusable applications even after mastering the syntax and its base libraries. Having been programming in Java since its inception, I hope I have come to appreciate the things I would like to see in any new technology material offered . This is especially true in the area of architecture and design. This book is the culmination of many of the "do's and don'ts" I would have liked to have had when I was not only learning .NET but trying to master it, as well.
Before returning to Microsoft as a .NET solutions architect and having embraced Java at one point, I truly have tried to hold myself impartial to the technology and language wars that insued between the two giants of Sun and Microsoft. I never prescribed to becoming truly biased in any one direction. Java definitely has its strengths and before .NET, had become my favorite object-oriented language for many reasons. I loved its syntax, threading model, type system, and especially the base class libraries. From someone coming over from C/C++ and Visual Basic, Java was it. No longer did you have to struggle with the C runtime and the myriad of functionality- overlapped external libraries. But Java wasn't perfect, as we all soon found out. "Write once, run everywhere" wasn't quite as seamless as first promised . Developing a custom Java GUI was not straightforward, and there were too many vendor options for code generation. Object orientation also became more mainstream and, with it, the need for design disciplines.
The Microsoft platforms have their strengths, as well. Visual Basic provides a fast development cycle when building rich GUI applications. As Visual Basic matured, it was becoming harder and harder to justify the need to develop specialized code, such as COM components using a lower level language such as C++. Visual Basic (VB) gave you this with much less effort unless, of course, you were writing a commercial product and needed extremely specialized behavior or a very small .DLL footprint. Using VB, business applications could be brought to production in weeks instead of months. Anyone who has done any GUI development in Java versus VB will understand exactly what I'm referring to. From the development viewpoint, I loved Java but it was too painful putting together GUI applications using AWT, Swing, or whatever third-party library I was using. The third parties made it easier as Java matured but you found yourself indicted with almost too many options. Choose one and you risk adopting a technology that becomes either unsupported or unmarketable. That seems to always be the problem when the inventor of the language doesn't also provide the most popular development environment for the language created. This is the case with Java.
In my humble opinion and even before joining Microsoft I feel that it has always built some of the best Integrated Development Environments ( IDEs ). Sure, there are more powerful editors out there that provide the truly hard- core developer a feeling of being omniscient. However, for the masses, you want a well-designed, tightly integrated, and user -friendly IDE that is not only reliable but also commonplace. What makes vi so popular in the UNIX world is what makes Visual Studio so appealing ”it can be found everywhere. If a Visual Basic or C++ application is going to be written on Windows 2000, Visual Studio is usually your tool. That is not the case in the world of Java. You have editors by BEA, Borland, Sun, IBM, etc., each with their own means of building GUI applications and code generation. As a Java consultant, I was required to try all of the major vendors because it seemed that no one editor was really predominant. For capitalism , this " open market" idea seems compelling but for engineering it can create convolution.
I thought to myself, "If there were only a platform that combined the best of Java with that of Visual Basic, sprinkled with the power of C++." This is what .NET (especially C#) is. I hope I can say this without making too many folks completely red in the face and wanting to put the book down as we speak. But being on both sides of the language wars, I hope I've earned the right to make such an opinion. The .NET framework is everything I loved about Java and much more. No longer do you have to choose a language and suffer the inconsistencies of the libraries that actually drive the development, not to mention other numerous benefits that I'll cover in this book. Being a first-generation product (version 1.1 of the framework is still first generation in my book), I'm astounded by the amount of functionality we have today, and this is the tip of the iceberg. Hopefully, .NET will continue to improve and become the cross-platform development framework of the future and bring along its benefits to those environments for years to come. Considering the amount of functionality already offered in only version 1.1 of the .NET framework and that offered by Visual Studio .NET, I can only imagine how much further the .NET platform will be two years from now. The rate at which Microsoft has generated this relatively different development environment is amazing and reminds me of the rate at which Internet Explorer blossomed into the predominant browser in the market in such a short period of time. That is not just good marketing but also good delivery. If you are a Java developer, take .NET for a serious spin; I cannot imagine you wanting to go back.
I began this book just after .NET Beta 2 was released in hopes that most of major features of the .NET libraries and its runtime would be complete. A year later, the framework version is due to be released and should be out by the time you pick up the first copy of this book. Thankfully, there has not been much change in that time, which says a lot for the thought that went into the original release and the stability of Beta 2. In fact, if you happen to have an old Beta 2 copy around, you are free to test the code referenced in this book. It should both compile and run. After all, this is a design and architecture best practices book. It is hard enough writing code in an environment that is somewhat of a moving target but even harder when trying to develop best practices during that time. The point was to write code somewhat agnostic to the technology. Using Framework 1.1 as an acid test to this, I was pleased to find out that all was compatible. When this book is finally published, .NET 1.0 will have been released for over a year and thousands of developers will be clamoring for content, sample code, and principles to use. Heck, I was doing that during Beta 2.
I hope to help you enter this different world that is a departure from Microsoft's traditional development platforms. Not only is Microsoft introducing what equates to an entirely new set of languages, but it also is providing those same elements that have attracted Java developers to its world. Microsoft is now introducing the aspect of true object orientation for all of those Visual Basic developers who have begun to taste it but not yet truly experience it. Bottoms up to the new taste of .NET; I'm sure everyone will be satisfied with the cooking.