Here are the two PPT decks from yesterday's talks at the JAOO conference and a few notes...
This deck is about layers and tiers and highlights (well, the talk that goes along with the deck does) how I make a strict distinction between the term "layer" and "tier". "Layer" is about organizing code in order to make it more resilient against change in other layers and "tier" is about distributing layers across processes and machines and defining appropriate boundaries as well as selecting technologies to cross these boundaries. I am also advocating to generalize the "classic" 3-layer (not tier!) model of "presentation", "business logic", and "data access" and make the underlying idea a pervasive and recursive pattern for basically all code in a business app.
Any class and any module may have one or multiple "public interfaces" that may be mapped to several incoming channels bound to different technologies. The public interfaces themselves (this includes public methods of a plain class) don't implement any logic, but always delegate to a strictly private internal implementation. That implementation, in turn, will not talk to external resources and services directly, but bind to abstract interfaces and access them via factories. (I will explain this in more detail here when I can make the time to do so)
At JAOO, the short AOP section of this deck drew some furious comments from an attendee after the session, who said that I was totally wrong and the AOP worked brillantly as a general purpose programming paradigm. However, when talking to him for a while, he had to admit that he and the colleagues on his project are indeed carefully considering and defining aspect dependencies and he sort of acknowledged that while their set of aspects will work great in and by itself, but it would be hard to combine it with an arbitrary foreign set of aspects. My main takeaway from the discussion with him was, though, that (a) it's due time for Java (and C#) to get support for generics, because that may be a better tool for a couple of things he pointed out and (b) that if you give people a tool like AspectJ, they will just jump and reinvent the wheel. The aspects he said his team implemented were (in ES terms) Transactions, JITA, Tracing, Security, etc. All the usual suspects.
This deck is an updated version of the Service Oriented Architectures deck that I've been using for this year's Microsoft EMEA Architect's Tour. I've included a couple of new aspects, including a stronger endorsement of UDDI, an explanation of the relevance WS-Policy and WS-Addressing, a look at the relevance of WSDL in the presence policy and addressing and a reference (and two borrowed slides) to my friend Arvindra Sehmi's most excellent presentation (free registration may be required) on autonomous computing and queing networks, which has become a very important part of the overall SOA story for me.