Следите за круговыми зависимостями между вашими классами и пакетами, вам не нужен код для спагетти.
Приложение My Swing существует из 9 модулей (контроллер, приложение, платформа, утилиты, модель, постоянство, сервис, регистратор и представление)
Вот зависимости:
view -> logger, controller, utils, model
controller -> logger, application, model, utils
application -> service, model, utils, platform
service -> persistence, model, utils
platform -> model
utils -> no dependencies
model -> no dependencies
logger -> model, utils
Требуемая зависимость от просмотра к контроллеру, но не от контроллера к просмотру.
Так что лучше всего добавить регистратор модулей и создать обработчик (который является наблюдаемым), который уведомляет наблюдателей (например, JFrame, JFace = наблюдатели).
Вид и сервисный модуль (место, где вы хотите вызвать наблюдателя) зависят не друг от друга, а через модуль логгера.
Но я думаю, что база данных работает так же. Я полагаю, кроме вас, зависит от структуры. Моего решения нет, поэтому, если я хочу перейти с Swing на swt, не беспокойтесь, я просто внедряю его для swt, и моя бизнес-логика остается неизменной.
Вы все должны думать о дизайне мудрее. (И используйте Maven.)