This post originated from an RSS feed registered with .NET Buzz
by Scott Hanselman.
Original Post: PDC - Day 2...
Feed Title: Scott Hanselman's ComputerZen.com
Feed URL: http://radio-weblogs.com/0106747/rss.xml
Feed Description: Scott Hanselman's ComputerZen.com is a .NET/WebServices/XML Weblog. I offer details of obscurities (internals of ASP.NET, WebServices, XML, etc) and best practices from real world scenarios.
I'll blog as interesting things happen. There's a thousand interesting things
going on here, so it's hard to break it all down into sound bites. But I guess
that's what makes blogs better than typical media, right? Fewer sound bytes.
Indigo is the successor technology and the consolidation
of DCOM, COM+, Enterprise Services, Remoting, ASP.NET Web Services (ASMX), WSE, and
the Microsoft Message Queue. It provides services for building distributed systems
all the way from simplistic cross-appdomain message passing and ORPC to cross-platform,
cross-organization, vastly distributed, service-oriented architectures providing reliable,
secure, transactional, scalable and fast, online or offline, synchronous and asynchronous
XML messaging.
But, being a Web Services guy, and being deep in the muck of WS-*.* for the last several
months I was confident that this would work itself out.
What I'm really digging on (as you should be) is Avalon. I will say this once:
The ramifications of putting Microsoft's weight behind a vector based
composition engine can't be overestimated.
Today, when you sit down to write a WinForms app, you do your “File|New Project|WinForms
Project” and there's a little section created for InitializeComponent() and
then they hide it in a Region. They even put a little comment there to warn you from
messing around. Something like:
//Good luck to you if you edit
this and piss off the Designer.
And when you open the little hiding region you see:
>this.components = new System.ComponentModel.Container(); this.Size = new System.Drawing.Size(300,300); this.Text
= "Form1";>
Isn't this fairly declarative? It's really just saying,
“Hey, here's how it oughta be“ or “Make it like this.“
You wouldn't expect to see if statements or for loops in here. It's just a lot
of C# (or VB.NET) code that lays out the Form. Golly wouldn't it be cool if
we could borrow another declarative language, maybe a markup language, preferrably
an extensible one. :) So, they take all that InitializeComponent stuff
and move it out to another Source File. Except this source file is a XAML file
instead of C#.
Imagine the ramifications of this on designers. The people that we think of
today as UI Developers may not be the people who drag buttons onto a Form in 2005-6.
You know how developers always say, “I'm a lousy UI Developer“?
I say, let the designers do that. The guys that make UI now will write UI interaction
code in the future, and interface with XAML files that will be created by Macromedia
This or Adobe That. It brings the ASPX and CodeBehind model to Windows
Smart Clients.
Since the forms can almost entirely expressed with XAML, this could usher in a new
era in design, with ACTUAL DESIGNERS and lots of 3rd party design tools saving XAML
files. Note that when Adobe showed the Adobe AfterEffects demo in the keynote,
all they had to do was add an export plugin to their app to create
XAML. They didn't even need a new app!
Also, it creates a single markup for UI development that is independant of VB.NET
and C#. Now, I overheard some folks saying, “Oh, they just generate the
same C# from that XAML file, so really nothing's changed.” Kind of a simplification,
but so what? That's the whole point of declarative programming models like that.
WHO CARES WHAT THEY DO WITH THE XAML, as long as it brings up a usable UI? If
it's Code Gen, some interpreter, or Black Magic, it's all good.
The last thing that's cool about having a declarative markup for UI development is
how it complements the concept of partial classes. Versions of .NET > 1.1
will have support for a single “logical class definition” being spread
across multiple files. What the means is that the XAML file and the C# file
ARE THE SAME CLASS just spread across two files (who also happen to be in different
languages.)