Separating interface and implementation is a good old principle, but surprisingly often it is violated.
Maybe one reason for this is the misunderstood role of the server-client model.
The server-client model is a deployment model. Or in other words, it describes the runtime properties of an application.
However, in software architecture (in the source-code maintainability sense) these two layers are not enough. The server needs to be split into two: the api and its implementation.
So the "minimal" set of modules for a client-server application is client-api-apiimpl.
Of course, there can be several client and server implementations, but 3 is the minimum number of modules.
Originally published on 2006-01-04 at http://www.jroller.com/wipu/entry/server_client_is_a_deployment under category Software Architecture