Sharing Models between Use Cases
In Chapter 4, Implementing a Use Case, I argued that different use cases should have a different input and output model, meaning that the types of input parameters and the types of return values should be different.
The following figure shows an example where two use cases share the same input model:
Figure 11.1: Sharing the input or output model between use cases leads to coupling between the use cases
The effect of sharing, in this case, is that SendMoneyUseCase and RevokeActivityUseCase are coupled to each other. If we change something within the shared SendMoneyCommand class, both use cases are affected. They share a reason to change in terms of the single responsibility principle. The same is true if both use cases share the same output model.
Sharing input and output models between use cases is valid if the use cases are functionally bound – that is, if they share a certain requirement. In this case, we actually want both use cases...