DCSIMG
Udi Dahan - The Software Simplist

Udi Dahan - The Software Simplist

For more information, visit www.UdiDahan.com - my main blog.

WCF Everywhere? Not on my watch.

smoking-gun The other day I was at Juval’s presentation where the main message was WCF is a better .NET. In other words, if you use WCF on every one of your classes, you’ll benefit. I don’t know about you, but I’m quite wary of silver bullets - they tend to inflict quite a bit of pain when used indiscriminately. This post is my response to all the people who came up to me at the end of the presentation and wanted to know if I agreed with these far-reaching architectural statements.

oz  First of all let me say that Juval is indeed a master presenter. The “looks like a class, walks like a class, quacks like a class” bit was excellent. I could tell that most people didn’t notice the speedy hands quickly deleting all attributes from the classes before the “looks like a class…” bit. At times, I got flashbacks from the Wizard of Oz - “pay no attention to the man behind the curtain”. If all attributes in WCF only went on the interfaces, then this might actually fly, but we all know that that’s not the case.

One of the interesting comparisons Juval made with WCF was the introduction of .NET. Few people in the audience seemed to remember (or maybe were just professionally younger than .NET’s 8 years), but when it came out .NET was marketed as being mainly about XML Web Services. Juval stated that this was done to play down the fact that .NET made the previous Windows programming technologies obsolete. He then drew the same conclusion about WCF - that it’s as much .NET 3.0 as .NET was the next version of MFC; besides being written in a language that resembles the previous technology, it’s really all different. I don’t think that anyone would argue the difference, but is it really a “plain .NET” killer?

The answer seemed to come around the overhead of WCF...

More SOA stuff for the DotNet Rocks crowd

Now that the show I did with Carl and Richard is online, I just wanted to let the new visitors to my blog know about all the other podcasts that I’ve done on SOA.

Here are some of the more popular ones:

And there’s always the archives with a total of 25 shows up.

If you are a new visitor and are looking for more information on NServiceBus, you can find it all here. You might also want to take a moment to subscribe so that you don’t miss out on any of the updates. And, as always, please do feel free to ping me about these topics via email or in the comments below.

Thanks for dropping by.

Team Leadership course now open

If you’re interested in avoiding Steve McConnell’s 36+7 classic mistakes of project management in your projects, I have just the course for you. Besides being a straight-perfectly evaluated course, this is just what new team leads need.

Combining enough project management philosophy with practical design techniques, attendees learn how to do project planning, and why the plan is never “done”; what kind of testing is appropriate for which project, and when each kind should occur; what it means to actually go into production and how to manage multiple versions of a software effort concurrently; how to use certain simple design techniques to enable outsourcing non-core elements of the project and how to manage those efforts; and more.

While this course won’t magically give you the experience you need to manage multi-million dollar projects, it will keep you from making those costly mistakes that can derail your project or even your career.

The course opens this July 29th at MediaTech in Haifa. Contact Belle for registration - via email Bell@mediatech.co.il, or phone 04-881-3332.

If you’re interested in having me come to your company and provide this training on-site, that option is available as well. Just send me an email to TeamLeadCourse@UdiDahan.com and we’ll work something out.

The course is based on Microsoft’s “Analyzing Requirements and Defining Microsoft .NET Solution Architectures” course number 2710 and as such counts towards your MCAD/MCSD - were you interested in certification.

Here’s the syllabus:

Module 1: Introduction to Designing Business Solutions
§     Overview of Microsoft Solutions Framework
§     Phases in the MSF Process Model
§     Introducing the Case Study—Adventure Works Cycles Application
 
Module 2: Gathering and Analyzing Information
§     Using Modeling Notations
§     Gathering Information
§     Analyzing Information
§     Creating Use Cases and Usage Scenarios
 
 
Module 3: Envisioning the Solution
§     The Envisioning Phase
§     Creating a Vision/Scope Document
§     Creating the Project Structure Document
§     Analyzing Risks
 
Module 4: Creating the Conceptual Design
§     An Introduction to the Planning Phase
§     An Overview of the Functional Specification
§     An Overview of the Conceptual Design Process
§     Building the Conceptual Design
§     Optimizing the Conceptual Design
 
Module 5: Creating the Logical Design
§     An Overview of Logical Design
§     Creating a Logical Design
§     Documenting Logical Design Output
§     Optimizing Logical Design
 
Module 6: Creating the Physical Design
§     An Overview of Physical Design
§     Physical Design Analysis
§     Physical Design Rationalization
§     Physical Design Implementation
 
Module 7: Designing the Presentation Layer
§     Basics of User Interface Design
§     Designing the User Interface
§     Designing User Process Components
 
Module 8: Designing the Data Layer
§     Designing the Data Store
§     Optimizing Data Access
§     Implementing Data Validation
 
Module 9: Designing Security Specifications
§     Overview of Security in Application Development
§     Planning for Application Security
§     Using the .NET Framework Security Features
§     Designing Authorization, Authentication, and Auditing Strategies
 
Module 10: Completing the Planning Phase
§     Incorporating Design Considerations
§     Planning for Administrative Features
§     Planning for Future Phases
§     Creating the Technical Specifications
 
Module 11: Stabilizing and Deploying the Solution
§     The MSF Stabilizing Phase
§     Testing and Piloting for Stabilization
§     The MSF Deploying Phase
§     Deploying to a Production Environment

Advanced Distributed Systems Design - R U Ready?

My good friends Eyal Vardi and Ohad Israeli, the guys behind Experts 4D are putting together one heck of a conference this July in Israel: R U Ready 2008.

Although the timetable isn’t set in stone yet, I’m going to be doing a full day course on July 2nd, so mark your calendars. The official link is here, but I’ve got the full information below. Here’s the registration page.

By the way, if you’re interested in having me give this course to your team, give me a shout.


Course Description:

Designing large-scale distributed systems is hard. New technologies make it easier to comply with today’s communications and security standards, but don’t auto-magically give you a robust and scalable system. Join Udi for a day packed with the wisdom of companies like SUN, Amazon, and EBay. Tried-and-true theories and fallacies will be shown, keeping you from making those same costly mistakes today. Communications patterns like publish/subscribe and correlated one-way request/response will be used in conjunction with advanced object-oriented state management practices for long-running workflows. If you enjoy deep architectural discussion, if you are in charge of building a large-scale distributed system, if you want to know more about how the big guys run their systems, this day is for you.

Course Content:

Module 1: Distributed Systems Theory

Decades of distributed systems development have taught us many lessons. In this module we’ll cover many historical mistakes as well as proven best practices for scalable and robust design. Topics include:

  • 8 fallacies of distributed systems
  • Transactions

Module 2: Identifying Coupling in Distributed Systems

Loose coupling has become the watchword of complex systems development, yet few understand its multiple dimensions. In the module we’ll be covering the three different dimensions of coupling as well as patterns for dealing with them.

  • Platform Coupling – XML/SOAP
  • Temporal Coupling – Synchronous/Asynchronous
  • Spatial Coupling – Endpoints/Topics

Module 3: Asynchronous Messaging Patterns

Although scalability is achieved through the use of asynchronous message passing, more advanced message exchange patterns are required to handle today’s complex integration scenarios. This module will cover the most commonly used patterns:

  • One way
  • Correlated Request/Response
  • Publish/Subscribe

Module 4: Bus and Broker Architectural Styles

Enterprise Service Buses are all the rage these days. In this module we’ll be covering what’s the difference between the Bus architectural style, and the more well-known Broker, found commonly in many EAI projects. Topics will include:

  • Architectural advantages and disadvantages
  • Technological advantages and disadvantages

Module 5: Long running work flows

The distributed communications patterns wouldn’t be complete without a discussion on orchestration. In this module we’ll see how to manage the state of long-running distributed communication flows as well as:

  • How to encapsulate work flow logic
  • Advantages and disadvantages of orchestration


If you’re interested in the full 2-day course which includes SOA topics, check it out. Advanced Distributed Systems Design with SOA - learn from the mistakes of others, succeed in your SOA project.

Using spaces with web services

Willam Brogden has an article up on SearchWebServices.com on How Web Services can use JavaSpaces. I don’t want all the Microsoft folks tuning out now that they’ve heard the “J” word, so let me just say that there are technologies out there for .NET too.

A “JavaSpace” is really just a space, which is, at the end of the day, a queryable distributed in-memory hashtable. Something many of us are already doing for caching. The reason you shouldn’t be doing this yourself is simple. While keeping a single hashtable in memory on a single computer and synchronizing it against changes to your database is simple, doing that in a highly available manner across multiple servers is not. Vendors providing solutions in this space include:

But there are others as well. Bottom line: don’t develop one of your own. Do a proof of concept with your short list of vendors and go from there.

The article sums it up nicely like this:

Although JavaSpaces servers are not trivial to set up, they are much easier than any other type of grid computing server. Furthermore, the simplicity of the interface makes the learning curve easier. The greatest advantage of the JavaSpaces approach is the ease with which additional workers can be added to the grid.

It should be clear from the example that there is a lot of extra communication traffic in a JavaSpaces solution so the only reason to use JavaSpaces or any other form of grid computing in support of a Web service is a requirement for computing power or special resources that are not feasible to supply on the server directly.

I have this to add to it. Whereas most traditional systems keep the idea of message-based communication and data caching separate, spaces allow you to kill two birds with one stone. Even if you don’t go the whole Space-Based Architecture route, you’ll find that spaces will fit nicely in your distributed architecture toolkit - I know I did.

Service Component Architecture, Service Data Objects, and my bus

There’s been quite a flurry of activity around Service Component Architecture (SCA) and Service Data Objects (SDO) in the non-Microsoft community. These specs have been sent for OASIS ratification and have garnered support from the Open Service Oriented Architecture (OSOA) organization - a collaboration of a dozen top software vendors including IBM.

I’ve been getting some questions on how these upcoming standards correspond to what I’ve been describing about SOA. Specifically, how does SCA relate to the Business Components and Autonomous Components I podcasted about.

First of all, I’d say that the SDO thing is, in my opinion, “much ado about nothing”. These are “merely” the messages that are sent between services. We don’t need further standardization there, if the WS-Splat has taught us anything it’s that more is definitely not better.

In terms of SCA, it’s components seem to correspond to the Service Layer of an Autonomous Component.

What does all this have to do with Web Services? Well, in both the SCA/SDO case and in my ESB/SOA case, we add constraints and guidelines on top of the generic ways WSDL has been mangled by the tooling.

In all cases, we still need to discuss what makes a good contract - what is good message design. I’ll be dealing with that in the next coming days.

More information:

Info from IBM on SCA.
Info from IBM on SDO.

How to structure .NET Solutions and Components - Podcast

Hello World, and welcome to “Ask Udi”, the podcast where listeners get their questions on IT Architecture answered. This is your host, Udi Dahan, bringing you the cold, hard facts you need to make decisions about SOA, Web Services, Domain Driven Design, Object Relational Mapping, Smart Clients – well, you get the picture. If it’s IT, it’s fair game. I am “The Software Simplist”, helping you Keep It Simple.

This week’s question comes from Mike who asks:

Hi Udi,

I was wondering if you could help me out or point me in the right direction. I’ve been programming on the .Net framework for several years now and want to move towards an architecture role. Additionally, I have been reading up on WCF and related .Net 3.0 technologies, but have more questions than answers.

1. Do you have guidelines/best-practices for how to structure a .Net solution and related assemblies? Also, guidelines as to how to factor the various namespaces and what goes where would be helpful.

2. How should components be factored, i.e. one component to an assembly or multiple components to an assembly? I’ve read several different articles that go back and forth, but never really got a straight answer.

3. How do components relate to services from an SOA perspective?

4. Does application scope/size impact the decision to use SOA? And,

5. Do you have any resources that I could use to learn more about SOA and .Net?

I appreciate the help and any answers that you can provide.

Mike

Get it here.

Additional References

Dependency Injection Tools:

Podcasts:

Want more? Go to the “Ask Udi” archives.

.Net 2.0 no big deal?

[Copied from my main blog]

Jesse seems to be swallowing the Microsoft party line without missing a drop in his latest post Screw 2.0, I'm Going Straight to 3.0.

From his post:


"The 2.0 framework doesn't really give you a massive amount of really new really cool features. There is one-click, which we probably wouldn't use anyway, generics (which are useful as a time saver, but don't really do much that you can't do without them), and some other little features... but the best part about the 2.0 framework is probably the IDE/dev experience, not what customers get out of it."

Granted, One-Click is nothing to write home about, but the runtime level additions, they just totally changed the way I write code. I'm talking about generics, anonymous methods, delegate inference, and the rest. The rest of 2.0, like the enhancements of the provider model in ASP.Net, well you would have developed the same kind of framework yourself if you were doing serious web development.

The whole 3.0 story, I've got to tell you, I'm pretty underwhelmed. Everybody seems to be jumping up and down about WPF, and yes, it's new and shiny, but there still the clunkety Windows message pump in the background. No real changes in how you're going to write multi-threaded UIs, which seem to be the real future given the rise in multi-core processing. The visual aspects of client side code in the systems I write run at around 5% of the overall effort. So the UI will look better, I dunno, 4D buttons and stuff, sorry for not falling over with enthusiasm.

And then there's WCF. Ah, wait, no publish/subscribe. Bummer, most of my systems being asynchronous in nature are built on the pub/sub model. An OO interface for interprocess communication? Who wants it - I need a message-based interface.

Don't forget WF - what was that for again? The main place where WF can fit my needs is for handling long-running workflows between systems, since I don't use Biztalk. But the performance of WF doesn't seem to fit this environment, it seems to be more suited for human workflow times.

If anything, I'd have to say that .Net 2.0 was a relatively big deal. 3.0 will probably be just as important with the runtime level enhancements like lambda expressions, extension methods, anonymous types, and implicitly typed variables. All the rest of the hyped up stuff in 3.0, I don't really expect it to change anything in how I work today.

Udi Dahan - The Software Simplist

Hello, my name is Udi. Some of you already know me, and my blog (http://udidahan.weblogs.us, and it's alias http://www.UdiDahan.com).

Yosi has been after me for some time now to start posting here, so here I am.

To tell you the truth, I'm not even sure what I'm going to talk about. Besides my main blog, I have another blog focusing specifically on SOA and Web Services on the Dr. Dobb's site: http://www.ddj.com/dept/webservices , with the details here. You can also find the "Ask Udi" podcast at the Dr. Dobb's site, subscribe here. I post more generic architecture type content can be found on the International Association of Software Architects (IASA) blog here. Beyond the online stuff, you can find me speaking at events like the VS2005 launch, as well as TechEd Developers Europe this year.

So, I guess I'll just open this up. What would you like to hear from an overbearing loudmouth who can't type worth sh!+ in Hebrew?