What does Service Oriented Architecture (SOA) and the 1997 movie, Face/Off have in common? If I told you Face/Off demonstrated an important aspect of SOA known as service abstraction, would you believe me? As a fan of the movie I think it’s worth reviewing as this whimsical comparison may be fun and educational. First we’ll go over some relevant information on the movie. Next we’ll review the concept of service abstraction. Finally, we’ll dig-in and derive how the movie demonstrates service abstraction and encapsulation in SOA.
Face/Off features John Travolta as FBI agent Sean Archer and Nicholas Cage as ruthless terrorist/psychopath Castor Troy. In the movie, Archer undergoes a face-transplant surgery and assumes the identity and overall physical appearance of Troy in an effort to foil his extortion plot. Troy does likewise with the appearance surgery and takes on the role of Archer. Both characters now look the part of the other in face, overall appearance and mannerisms but still remain their inner self.
A major fundamental of SOA is well-defined interfaces that expose business capabilities in a service-oriented manner. These interfaces encapsulate and abstract the true business logic, processes and systems that lie underneath the service definitions and in essence keep the actual implementations “undercover”. This is known as service abstraction. The service interfaces provide common contracts that clients recognize and can easily integrate with.
Tie It All Together
In the movie, the “Service Interface” is each individual’s exterior appearance, voice and mannerisms. By the actual Sean Archer looking like Castor Troy, he is able to more easily integrate with Castor’s villainous crew. The crew visually recognizes Castor and integrates with him while being unaware the underlying implementation is really Sean Archer. Similarly, the actual Castor Troy surgically attaining Archer’s face and appearance allows him to easily integrate with the Archer family. The diagram below depicts both the Sean Archer and Castor Troy system actors as the underlying implementations of the opposing character’s Service Interface:
The clients of a well-defined Service Interface will maintain their integration contract and not recognize any underlying changes as long as the service looks and acts as expected. As shown above, the Villainous Crew client integrates directly with the Castor Troy interface while the Sean Archer Family client integrates with the Sean Archer interface, unknowing of the underlying system implementations.
This example of service abstraction within the movie Face/Off may be a far reach, but the overall intent of discussing is to give a candid reminder to architects to really think about abstracting their services from the actual implementation. If our service interface definitions really represent the business capability that is needed to fulfill the functionality and they abstract from the intended implementation, then it does not matter what the underlying implementation really is. This implementation could be any system such as custom code, legacy mainframes or third-party services like Salesforce or SAP. Adhering to this basic service abstraction pattern and utilizing a domain-driven design helps to future-proof your services while more easily allowing the business to evolve their underlying infrastructure, system implementations and third-party integrations over time as the needs change.
For more information on service abstraction, either watch Face/Off or reference: http://www.serviceorientation.com/serviceorientation/service_abstraction