.NET Complete

WinFX

As a supplement to the talk today, I think this would be a good time to clarify more of what the .NET framework is. You are all equipped a bit more to understand this now that you have seen something that is _built_ on top of the .NET framework.

To review, .NET is a more of a concept than anything else. To do .NET development means to do some type of development with the .NET Framework. The .NET framework is a framework which provides the foundation for specifics pillars to use. ASP.NET is .NET realized in the web, Winforms (.NET windows applications) are a realization of .NET in the Windows world, but there are other manifestations of .NET.

Even the .NET framework is built on top of a foundation called the BCL (Base Class Library; as mentioned in the previous supplemental lesson.) I've attached a poster that is posted on Brad Abrams blog (Brad Abrams is program manager for the Common Language Runtime team ...and one of my role models.) This poster is a layout of WinFX. I keep mentioning WinFX and I mention it as the fruition of .NET. In reality though, WinFX is a massive upgrade and reorganization of .NET. WinFX also brings a few new pillars to the table.

Looking at the poster, you will see that the Foundation is the bottom. This foundation has the BCL. Normally the BCL is thought to be the lowest you can go, but reality the BCL runs on the system and runs on top of compilers and other things. As I said one time, Avalon runs on top of DirectX. This will of course in turn talk to the hardware.

Above this stuff, you will see the different pillars of WinFX. This is similar to the current .NET framework except that many things were added and reorganized into a new logical structure. The point, however, is that these pillars run on top of the foundation. The WinFX pillars are Avalon (Presentation), Indigo (Communication) and Data. Avalon basically replaces the concept of .NET Winforms that we have today, Indigo streamlines web services, COM+, MSMQ, and other service-oriented things and the Data pillar is a reorganization to keep anything data related together. Each of these are frameworks for other development. The Presentation Framework (Avalon) is built on top of the BCL "framework" and other frameworks will in turn be built on top of this framework.

Up to this point I've used the term "abstraction" to mean theoretical, but the entire point of .NET is abstraction in a different sense. .NET "abstracts" the lower level stuff away from you so you don't have to deal with it. For example, the PF (Avalon) "abstracts" anything visual from you so you don't have to deal with graphics directly. In turn, though, each framework in WinFX bring a higher level of abstraction so you do less and less coding.

One of the most common pillars of .NET is the ADO.NET pillar. This is the .NET pillar for database access. You use ADO.NET to access SQL Server in .NET 1.x and .NET 2.0 (and WinFX!) In this context, it's such a common pillar that it's never actually considered a pillar, but as part of the foundation. Since, WinFX brings a new reorganization to .NET, ADO.NET is placed in the Data pillar as a specific type of data access in the overall pillar of Data.

There are also many, many other frameworks. Last month at the Microsoft annual developer conference, they publicly demonstrated Atlas, the framework to streamline client-side JavaScript development. So, in addition to ASP.NET (server side web built on the BCL), PF (Windows presentation stuff), and CF (Windows communication stuff), there is now this pillar which provides a framework for client-side development which works with ASP.NET to abstract advanced JavaScript from the developer. Being a JavaScript expert, I can tell you that this is an extremely important level of abstraction. You still use JavaScript, but instead of writing the code to manually access server resources, you access them with the .NET framework.

Furthermore, SQL Server 2005 is basically SQL.NET. You can do .NET development right inside of SQL Server. This replaces the concept of a cursor and, in many cases, function, very seamlessly. While this does NOT in any way replace TSQL (TSQL is for set-based processing, not iterative), you can use .NET assemblies to simplify your development. In other words, your SQL Server development will be .NET development. This means that your SQL Development will be based on the BCL. So even if someone doesn't care about web or windows development, they still need to know .NET to be a SQL Developer.

As if this weren't enough, Office 12 is basically Office.NET. Office will basically be an entirely new pillar to the .NET universe. The details are still sketchy, but from what I understand, you will basically be able to do anything with Office 12 with .NET. There will be an entire framework (probably built on both Avalon and Indigo) just for Office. If you think about it...this means that you could use ADO.NET to access data directly in Excel. You wouldn't be exporting reports, you would be opening SQL Server data as an Excel sheet.

The next IE should theoretically be IE.NET. In addition to fixing _some_ of the problems with IE6 for Windows (I remind everyone that IE5 for the Mac is fine; only IE6 for Windows is a disaster), the primary purpose of IE7 is the allow for smart client .NET applications. You can currently do this with .NET, but not to the degree you will be able to do in WinFX. If you don't know what a smart client is, it's basically a windows application run in a web browser. Sound familiar? This is what Microsoft was trying to do with ActiveX. So, the main purpose of the existence of IE7 is to allow developers to create seamless (bc of .NET), powerful (bc of .NET and Indigo), beautiful (bc of Avalon) windows applications which can be deployed as web applications (If WinFX were out now I would recommend to do this for the Intranet instead of ASP.NET)

So there are many frameworks (pillars) to .NET and more are released as they are created. If there is a Massive .NET product, expect a framework to implement that as .NET.

The other thing to remember is that since all these things are .NET, they will all share the same language, same concepts, be built on the same BCL and use the same assemblies you can create your own frameworks to make your company and/or projects generically .NET based. For example, the Zouire Framework I'm writing would be shared across all frameworks (pillars) of .NET. If you create "business object" to connect to some type of data to do some type of processing. You can show the results in a windows form (Winform or Avalon App), on the web (ASP.NET), have to shared as a web service (Indigo), or show it as a Word document (Office 12.) The base framework you create will be generic to be manifested in a number of ways...

As a final note... the web, windows apps, office, databases and other things all have their place in .NET, but what about a framework (pillar) just for the operating system in general? That's what Vista is. It's basically Windows.NET. It's a native environment to run .NET applications. Even the command prompt is completely rewritten to be .NET based. This means that you will have very advanced .NET (C#) "batch files" (called cmdlets). This is much akin to what is done in the Unix/Linux world with having a powerfully scriptable command shell. Soon there will be one fundamental programming model for all your development, no matter what world you develop in. You only have to learn the specifics of the system, but most of your "business logic" will work everywhere.

The ultimate point is that .NET is a huge universe that keeps growing. There is no stopping point to learning .NET. Even though I know .NET technologies very well, I'm learning the new Atlas framework and also the PF. So, it really never stops. On the other hand, most of your knowledge is still useful when you learn a new framework. The new framework is still going to follow the CLS and the .NET coding requirements so everything works the same way, you just have to do less to get a similar result to what you were formerly doing "long hand". It's all the same language, just a further level of abstraction to help you code less and less. Furthermore, you can write your own frameworks on top of all of these to allow others to write less and less...