In this section, we will design the two interfaces that we will implement. When we design interfaces, we focus on the functionality first. Formatting and protocol come later. Interfaces, generally, should be simple and, at the same time, accommodate future changes. This is a hard problem because we cannot see into the future. Business, logistics, and all other experts may see some part of the future—how the world will change and what it will impose on the operation of the company and, especially, on the interface we provide for our partners.
The stability of an interface is of utmost importance because the partners are outside entities. We cannot refactor the code they use. When we change a Java interface in our code, the compiler will complain at all the code locations where the change should be followed. In case of an interface that is used outside...