Many organizations are pursuing SOA initiatives to achieve business process transparency and agility. While executing on projects you don’t want to lose sight of a reusable inventory of services that you can build for meeting your current and future needs. As much as immediate deliverables are important you should always look for reuse opportunities in the following areas:
- Integrating user interface tier with the business tier – look to create reusable business services to initiate business processes and get status of business processes. If a business process needs to be customized encapsulate these variations using business rules and configuration. Aspire to define a “template” process which hooks for plugging in product-specific or line of business-specific variations in functionality. Also define a standard set of business actions that any user interface can leverage. This is effectively to decouple the user interface from the business layer so additional apps can leverage your processes
- Integrating with legacy systems – this should be your #1 area for reuse. Never let go of an opportunity to wrap a legacy capability as a business or data service. Ensure your service capabilities are categorized appropriately and service interfaces are devoid of legacy semantics. Often you will find legacy systems have capabilities that are tightly coupled to additional data or processes that might need to be refactored. In those cases look to identify business rules and place them separately for reuse. If legacy system needs data asynchronously publish standard messages and have the legacy system subscribe to them. Avoid one-off point to point integrations as much as possible and you will significantly increase the level of reuse
- Integrating business processes with data services – look to reuse data services for managing your core data entities. Services may not always exist and it is tempting to build project specific services but you should resist that and strive to build standardized services. If necessary refactor existing services, plan a migration path for your existing consumers, and build towards reusable service capabilities.