The book Practical Software Engineering: A Case-Study Approach advocates for putting interfaces in seperate projects/packages.
The PCMEF+ architecture which the book talks about has the following principles:
- Downward Dependency Principle (DDP)
- Upward Notification Principle (UNP)
- Neighbor Communication Principle (NCP)
- Explicit Association Principle (EAP)
- Cycle Elimination Principle (CEP)
- Class Naming Principle (CNP)
- Acquaintance Package Principle (APP)
The description of principle #3 and #7 explain why it is a good idea:
The Neighbor Communication Principle demands that a package can only
communicate directly with its neighbor package. This principle ensures
that the system does not disintegrate to an incompressible network of
intercommunicating objects. To enforce this principle, message passing
between non-neighboring objects uses delegation (Section 9.1.5.1). In
more complex scenarios, acquaintance package (Section 9.1.8.2) can be
used to group interfaces to assist in collaboration that engages
distant packages.
The Acquaintance Package Principle is the consequence of the Neighbor
Communication Principle. The acquaintance package consists of
interfaces that an object passes, instead of concrete objects, in
arguments to method calls. The interfaces can be implemented in any
PCMEF package. This effectively allows communication between
non-neighboring packages while centralizing dependency management to a
single acquaintance package. The need for acquaintance package was
explained in Section 9.1.8.2 and is discussed again next in PCMEF
context.
See this link: http://comp.mq.edu.au/books/pse/about_book/Ch9.pdf