That is a very good comparison. I tend to err to #2, because I think of this more as separate databases. It is quite useful to decompose problems into different units, which might represent different actors or aspects of a domain space. Thus, the ability to describe interface definitions from both sides provides a way to describe the interface in the terms of each side, serving as a way to document internal assumptions and allowing for the necessity of intermediaries to surface. This is a concept that is shaped by C's notion of translation units.