saksmt
@saksmt
PHP-developer, Backend

Как приготовить Java SE + MVC + SWING + DependencyInjection/IoC?

Предыстория
Решил я, что настаёт время перелезать с веб-разработки на РНР (Symfony) на Java.
Появилась идея написать что-нибудь на Swing, причём по всем канонам ООП и абсолютно правильно.

Проблема
Тяжёлая степень зависимости от правильности организации зависимостей, как следствие зависимость от DependencyInjection и MVC/MVP/MVVM + личное глубокое убеждение, что Модель и Представление - независимые компоненты (т.е. Контроллер зависит от Модели и от Представления, Модель независима, Представление независимо).

Вопросы
  1. Как организовать MVC/MVP/MVVM, только без смесей Контроллер+Представление\Модель+Контроллер?
  2. Как смешать это с DependencyInjection?
  3. Есть ли для этого готовые решения?
  • Вопрос задан
  • 3615 просмотров
Пригласить эксперта
Ответы на вопрос 1
@bromzh
Drugs-driven development
Что значит, по всем канонам ООП? Java весьма далека от правильного ООП подхода хотя бы потому, что там не всё есть объект. Да и в рамках самой Java есть несколько разных стилей. Надо писать не по канонам, а исходя из задачи.

1) 1, 2. Это классический MVC, с активными моделями, в которых вся бизнес-логика. При обновлении модели она оповещает все виды-слушатели. При событии во view, он вызывает оповещает контроллер, тот вызывает нужные методы модели. В вебе MVC неправильное.
2) Зачем? Ошибка многих начинающих джавистов - использование DI там, где это не нужно. В мире JavaEE DI - частое явление, потому что там бины управляемые: сервер приложений запускает приложуху в контейнере, сам регулирует контекст и время жизни бинов, может предоставлять свои реализации API и т.д. А в свинг-приложениях ничего такого нет, программа запускается через main-метод, все реализации API включаются в итоговый jar, время жизни бинов отслеживать не надо... Вполне можно обойтись простыми конфигами + фабриками/билдерами, чтобы регулировать зависимости. Хотя если очень хочется, то вот, например.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы