Pattern-Oriented development is paramount in IT. Patterns are used for designing software [POSA], integrating applications [EIP] or building enterprise systems [PEAA]. They make us feel comfortable that are our solution in the end will be extensible, reusable and hopefully along the way we managed avoiding some age-old pitfalls.
One thing enterprise software architecture teaches us is to rely on layers. There are various patterns and styles of layers but more than likely if you are missing layers you are missing the mark with your framework. Inside the context of integration landscapes and even application development, the introduction of services has greatly improved our ability to leverage layers well; make them more understandable, reusable and frankly standard.
Services can mean lots of things, from a simple exposed interface to a data object, to an managed end-to-end business process, to an interactive SOAP web service or EJB. But at the end of the day, the term service has become common with the 'stuff' or components we should be interacting within our layers.
If it's a data layer, then provide me data-access CRUD like services. If it's a domain layer, provide me with business process logic. If it's an application layer, provide me with interface adaptors. It it's a presentation layer, provide me with representational views. And the list goes on and on, but we all agree we should be employing our patterns with services in mind in both development and discussion.
Does this therefore mean all architecture lends itself to Service-Oriented Architecture? Well, no. Service abstraction is something service-oriented architecture leverages but in practice an SOA is far more. Furthermore, I contend that due to this lack of understanding, there is a very high risk of creating a Service Architecture (SA) and missing the boat all together on the sought after Service-Oriented Architecture (SOA).
The SA is something we rarely talk about and only whispers can be heard of it in JAD meetings, or final production audits. As a definition, I will give it this: An Integration Landscape focusing on providing interoperability primarily through exposing and managing services across the enterprise. In short, take your spaghetti code and stovepipe applications, re-architect them using services and layers (ignoring the true patterns from whence they came), and you are left with an expensive replica of what you had: a point-to-point mess only this time with fancy service names attached to all those tightly-coupled interfaces. And just because you decided to run all this on top of the latest ESB you hope to god the resultant SOA guarantees all the power it touts. For this reason, I have grown to hate the term 'integration point'. As if all I need to do is define some necessary communication /action and provide some code to interoperate and voilà, a true service comes out and now we are on our way to an SOA. Sorry to say nope — designing integration landscapes by focusing on integration points, will usually get you quickly to a place where web and point are frowned upon. (Referring the web chaos of point-to-point architectures). Unless of course you were going for P2P, but since this BLOG is about SOA, I would assume you are not — and thus frowning is applicable.
SOA has evolved to mean so much, maybe too much, but at the least it is associated with a series of highly desired characteristics of enterprise application architecture. Benefits like agility, governability, real-time, guaranteed, extensible and intelligent add to our ROI while benefits like reusability, maintainability, operational efficiency, automation, auditability reduce our TCO. So how do we ensure we get all this? Is it even possible? Or is SOA another ivory tower pipe dream big software vendors and consultants are helping us peddle?
Check out some of my previous postings for definitions of an SOA — but in short, I would have preferred the 'S' stood for Standard. As in the tried and true standards that have really stood the test of time and now we finally are smart enough to realize it and start repeating it rather than conjuring up something new for our own ego sake. However, for this posting I will offer this up for defining an SOA: An Integration Landscape that provides both interoperability and infrastructure through a strategic enterprise solution embodying connectivity, consolidation, composition and completeness. Before I get hammered by the SOA for dummies people who say where is mention of the business people, this is meant to constrain SOA as an integration landscape not a project methodology. I am not trying to redefine IT departments and IT business as we know it, just pointing out that when I look at what was actually implemented, how can I tell if it was more of an SA or SOA. Besides, I added words like 'enterprise' and consolidation to include the business (yes the stakeholders and business owners are important) — you cannot achieve consolidation or completeness without the business. See my blog on SOA Maturity.
The big deal here is the combination of technology, infrastructure (IT resources and Business resources where resources are people, processes and tangible assets) and standardization in a way that shows evolution and maturity of thought on both sides. ESBs, web services, integration points, BPM or even technology patterns can not achieve this alone. For an SOA to begin to produce all the benefits it so badly wants to, it needs some old school experience to pave the way. Don't throw out all your old PM methodologies or Architectural gurus in favor for new-age hype. Slow down, question why, document decisions points, make sure you are actually modeling your business not technology or a deadline, and for goodness sake, make sure the solution everyone is going for actually makes sense.