It is important to understand interservice dependencies, because they control
the degree to which a service can be deployed as an autonomous unit. They impact
its evolution over time, because dependencies become constraints on the service's
ability to change. Pattern 10: Keep Architectural Elements Decoupled specifically speaks to techniques
to use to reduce data-related dependencies between services.
Service dependencies describe the relationships between services that arise
in the larger context of how they will be used. Such dependencies include these
examples:
- Functional dependencies and composite dependencies that arise
from composition of multiple services.
-
-
Example: The purchasing service depends for its functionality on services that meet
the specifications for the InvoicingService, Scheduling, and ShippingService ServiceInterfaces.
- Temporal dependency where there is some pre- or post-condition or
processing requirement that will need to be accounted for in compositions
or choreographies.
-
- Precondition dependency: Another service must be invoked before
the current invocation can begin.
- Processing dependency: Another service invocation is required
to complete the successful execution of the current service.
- Post-condition dependency: This occurs in cases where a
service requires another service invocation after its execution.
These dependencies might often be a part of the decision process that a service
client has to go through in choosing to reuse a service, particularly if there
are multiple implementations to chose from.
These are the kinds of dependencies and associations in the service model
that are important:
-
The relationship between a ServiceInterface and the Participants that realize it
-
The relationship between a ServiceInterface and its provided and required interfaces
-
The relationship between a service (in SoaML terms, a ServicePoint) and the ServiceInterface types of any services it depends on for
its functionality
-
The relationship between a service and any ServiceChannel that connects it to other services
-
The relationship between a service and any service-oriented solution in which the service participates
Therefore, it is important that all service specifications be complete, not
only with respect to the operations and messages they provide, but also regarding
any dependencies, such as required interfaces for callBack operations. |