SOA and SOE sound great. I love the goals, and I think that this approach may be
able to accomplish them. In fact, I'm trying to adopt these philosophies
myself and explore the benefits and drawbacks. However, instead of discussing if
SOA is going to work, I've been wondering what happens when you do SOA
half-assed.
That's right - what happens when you use SOA approaches but do them poorly, or
without understanding? Now that you've quit reading, let me explain why I ask
such a stupid question.
I see a lot of systems on client sites. I see a lot of systems designed and
implemented by people who are still learning some of the basics of design and
implementation. Most of these use try to use the current "industry standard"
n-tier approach, and the vast majority of those end up with a failed
attempt that I like to call "smeared-tier". Smeared-Tier is a three-tier design
where the data layer has business logic, the business logic layer has calls to
the physical database and exposes presentation data directly, and the
presentation layer has business logic and data access functionality both baked
in. You're probably lying or well isolated if you've never seen it. The thing
about this is -- it still works
No, it's not a good approach. But smeared-tier gives some separation and allows
some maintenance
to occur. In fact, it's much better than the alternative monolithic (everything
is in main approach that the same shops can and do use). So what
happens when SOA is approached with the same throw-it-together attitude?
My fears are that all hell will break loose. The "SOA" system will become HTTP
RPC with SOAP tacked on. Each service will be used by only one system, and many
duplicate (or near-duplicate) services will be written -- "That service doesn't
return zip code, so we have this service here..." Language or tool-set specific
objects will be serialized as messages (when it's not just RPC) and so shared
base types will be needed. Basically, we'll have distributed objects instead of
services. Whole systems will be redone as smeared-tier when performance is
completely unacceptable,
and the vast majority of the industry will denounce SOA. (From my
experience, the vast majority of the industry cannot handle OOP, n-tier, or
even event-driven thinking, let alone leaping to messaging)
N-tier done wrong can still succeed (somewhat). Can SOA done wrong have the same
level of miracle success? I really don't think it can. If it fails when the
system is designed and constructed poorly will it force people to do it right,
or will it cause them to not do it at all?