В основном согласен с Клинтоном.
В конечном счете, каждое имя пакета является островом в том, что касается Java, но может быть удобно разделять вещи в соответствии с тем, что собирается, с тем, что во время сборки, как в:
com.foo.client.*
com.foo.server.*
com.foo.common.*
В большинстве случаев это упрощает ваши наборы файлов ant. Обратите внимание, что это применимо, даже если расположение исходных файлов совсем иное, из-за того, как все устроено, или чего-то еще. Единственное, что я хотел бы сказать, это быть осторожным, чтобы не получить один и тот же пакет в нескольких исходных каталогах! Это может быть некрасиво и легко сделать случайно.
Так что, если такое мышление не подтолкнет вас к созданию отдельных высокоуровневых пакетов, мне нравится стиль помещения пакета реализации в пакет интерфейса, присвоения имени пакету impl, который указывает на его специализацию, и присвоения имени реализация FooImpl
. Вам почти никогда не нужно импортировать несколько реализаций, но иногда вы хотите импортировать как интерфейс, так и impl, и в этом случае было бы хорошо, если бы у них было похожее имя.