December 8, 2008
@ 10:56 PM
I am (finally) writing some new stuff for my SOA book - working on a few Anti-patterns
  • The Knot - The distributed version of "big ball of mud" basically point to point integration
  • NanoServices - designing/building fine grained services (methods != services)
  • 3-tiered SOA - dressing up 3-tier architecture in SOA clothing (e.g. database as a service)
  • Whitebox Services - exposing internal structure - comes in two flavors exposing technology and allowing access not through contracts
  • Transactional Integration - inter-service transactions (use Sagas instead)
  • RESToid- combing SOA and REST without understanding the full implication of either
I am going to publish one of them (probably the "knot") in a few days but I thought I might be able to get a little feedback before that. I chose to describe anti-patterns in the following format:

  •  Context - Presenting the problem (probably through an example)
  •  Consequences - Explaining what the problem is. i.e. what happens when the anti-pattern is prevalent
  •  Causes - discussion on the forces that lead to the anti-pattern
  •  Refactoring - The patterns (and/or other tips) that can be used to fix the design
  •  Known Exceptions - Are there any contexts where using the anti-pattern is acceptable
I'd be happy to hear any comment you have on the anti-patterns listed above as well as comments on the structure for describing them

Thanks
Arnon


 
Tuesday, December 09, 2008 12:00:00 AM (GMT Standard Time, UTC+00:00)
If you have not seen this yet, there is a good recent read from Michael Nygard (of "Release It!" fame), on pattern languages in general and context / relationship between patterns: part 1 and part 2.

I don't mean this as a commentary on your patterns (have not had a chance to read what's available yet), just thought you might be interested since this is about the general approach of thinking in patterns ...
Alex
Tuesday, December 09, 2008 8:55:45 AM (GMT Standard Time, UTC+00:00)
Looks like a good list of patterns, will any of these patterns cover issues with the "Entity Services" approach (even just the tradeoffs).
Tuesday, December 09, 2008 7:41:15 PM (GMT Standard Time, UTC+00:00)
Another question about the book, I'm loving the content/format but I'm wondering if you are going to have a chapter with an example of a best-practice service.

For example I'm sold on the large scale business services encapsulating domain models, exposing resources and communicating with each other through messages (inversion of communication). Anyway I realize this is just one approach and there are lots of tradeoffs involved so an example/case study explaining a few approaches could be quite useful.
Tuesday, December 09, 2008 8:17:46 PM (GMT Standard Time, UTC+00:00)
@Colin
On entity Services I'll see - I am not sure I can explain that clearly enough
On "best practices" - well, I don't like the term best practices, since different things are best in different contexts. There's a "putting it all together" appendix planned (Udi once said he'd be willing to do it - I need to see if he is still up for that) where the idea is to present a few patterns working in a larger context

Arnon
Wednesday, December 10, 2008 11:11:27 AM (GMT Standard Time, UTC+00:00)
You are probably right on "best practices", it sounds like the "putting it all together" chapter will do the job.
Thursday, December 11, 2008 10:10:24 PM (GMT Standard Time, UTC+00:00)
Here's another question.

Just to put more detail than above, our plan is to have big autonomous business focussed services (CRM/Finance/Delivery). These wouldn't be specific web services, they're more along the lines of business services that Steve Jones/Udi and others discuss. Anyhow each will jealously control one or more databases and domain models, all good. However the plan is to expose (REST) resources from each of these services for clients to use but use normal messaging (NServiceBus/Mass Transit) between them (though Atom feeds would be an option).

Long winded explanation but I've used many of these technologies/approaches before other than REST and I wondered whether what I'm suggesting sound to you like I'm thinking in RESToid terms? Would you instead recommend using REST for read-only (caching as much as possible) but using a messaging metaphor for everything else? How about going the whole hog and using REST for all communication with and between services (so no messages but Atom feeds for communication between services)?

I'm especially interested in your view as not enough people who really understand REST and SOA seem to be discussing the trade offs you get when combining them. Oh and feel free to say "overly long question, wait for the chapter to appear" because it is too long and I really should just wait :)
Comments are closed.