Для будь-якої мови поєднувати їх в одному пакеті - це добре. Важливим є те, що піддається зовнішньому світу, і як це виглядає ззовні. Ніхто не буде знати чи піклуватися про те, чи є реалізація в тому ж пакеті чи ні.
Давайте розглянемо цей конкретний приклад.
Якщо у вас є всі загальнодоступні речі в одному пакеті, а приватні речі в іншому пакеті, який не є загальнодоступним, клієнт бібліотеки бачить один пакет. Якщо ви переміщуєте приватні речі до пакету з відкрито відкритими речами, але не виставляєте їх зсередини пакета, клієнт бачить точно те саме.
Таким чином, це має запах правила без поважних причин: воно приймає рішення на основі того, що є загальнодоступним, а це рішення не впливає на те, що є загальновидимим.
Тим не менш, якщо в якомусь конкретному випадку здається гарною ідеєю розділити інтерфейс та реалізацію на окремі пакети, ідіть вперед і зробіть це. Причини для цього, які мені приходять на думку, полягають у тому, що пакет величезний, або у вас є альтернативна реалізація, до якої ви можете зв’язати замість стандартної.