|
|
|
|
|
|
|
10 Things I Hate About Indigo
Steve is still confused, so I thought I would spell it all out for him.
- The examples, especially the accursed Calculator example that's infected MSDN. The worst part is not that it is stupid and inane (right, you're going to go across the network to add two numbers together, Hello, you have a computer right there in front of you). The worst part is the subtext that tells the unwary programmer that using Indigo is just like a local method call. I really thought, based on your comments at PDC 2003 ,that you guys understood that location transparency is bad, but apparently not.
- The client programming model that makes network roundtrips look just like local method calls (result = Calculator.Add(value1, value2). Why don't you have a simple messaging model for the client?
- The service programming model that encourages you to directly expose methods to remote callers rather than responding to messages as events.
- Typed services because they replicate RPC semantics. To quote the book, "working with typed services feels similar to RPC-style distributed object technologies such as .NET Remoting". This where you expect most developers (especially Mort) to work and it is the worst possible place.
- Untyped services which are just slightly less tightly coupled RPC's.
- Message-layer programming which where I'd like to be because down there it's obvious that Indigo is sending the messages for you, but it is so freaking complicated that mere MORTals will get hopelessly lost. Seriously, when we adopt Indigo at my day job, I know I'll have wrap this layer with a simpler, less complicated interface. It will look a lot like System.Messaging but it won't be limited to MSMQ. That's what I hoped Indigo would provide.
- Attribute abuse. I've already harped on this one, but let me add that by using attributes you're insinuating your code into my domain model in completely inappropriate ways. I want to use Indigo explicitly, not implicitly via attributes.
- Configuration is good for some things, but not others. You guys seem intent on repeating the mistakes of the past. In this case, it reminds me of MTS. We all learned pretty quickly after it was released that allowing someone to change the transactional model of a piece of code after deployment almost always ended in disaster. Likewise, several elements (transports, security, etc.) in Indigo are simply too fundamental to be usefully configurable.
- Svcutil is evil. This is the tool I was referring to in my earlier post. Just like the attribute-driven approach, Svcutil infects my domain model with your code. Svcutil always imposes distributed object/RPC semantic (at least as far as I know)>
- The "One Ring to Rule Them All" philosophy. The whole "unification" strategy looks more and more like you guys just took a whole bunch of unrelated and, in some cases, incompatible technologies and threw into one big bag without any thought as to the underlying architecture.
Let me sum things up like this. I want Indigo to stay out of my domain model. I would like a vastly simplified version of the message-layer programming model promoted as the right way for most developers to use Indigo services. If you took the best parts of System.Messaging and WSE, you would just about have it. I hope that clears things up.
Posted
Aug 14 2005, 01:03 AM
by
john-cavnar-johnson
|
|
|
|
|
|