First I googled and read through these questions:
Creating multiple contracts or Single contract with struct
Why are so many examples using separated contracts (e.g. crowed sale contracts in zeppelin...)? IF I got all this right in most cases it would make sense to NOT use separated contracts. It would not even make sense to use libs and interfaces. Imho an interface makes sense if I do not have to pay gas for execution. But we are on a blockchain and want to keep contracts as "slim"/"light" as possible. Therefore I would even only copy the code functions I need out of a lib (only use the whole lib if I use all functions). Use the interface only for checking and debugging...