1

Тема: Реалізація MVC патерну в нескладному desktop додатку на Java

Доброго дня! Я новачок в Java і вирішив написати свій перший додаток, в якому буде використовуватися MVC патерн.
Ідея проста: є база даних автомобілів (на справі просто ArrayList). Зліва у вікні знаходиться меню з трьома кнопками: переглянути всі машини, додати машину, видалити машину. Справа відображаються панелі, які відповідають діям кнопок (панель з висновком всіх машин, панель з формою додавання машини і видалення відповідно).

Проблема виникла ось в чому: як правильно організувати зв'язок Control складової з View і Model.
У коді я створив окремо два класи: ViewMain, який інкапсулює в собі всі елементи GUI, і ModelMain, який інкапсулює базу даних та інші дані. Екземпляри класів створюються відразу після входу в програму. Contol ж поки реалізований у вигляді класів, які відповідають за окремі компоненти View (за меню, панелі та інші).

Коли справа дійшла до Control частини, то виникли проблеми:
1) Для кнопок я просто створив екземпляр класу MenuControls (відповідає за зміну панелей в правій частині, яка відбувається при натисканні кнопок) в класі, який відповідає за меню MenuView. Тут все працює нормально і код виглядає начебто пристойно тому, що зв'язок виходить тільки між View і Control. Чи правильне таке рішення в цьому випадку?

2) При написанні ж контрола, який би брав базу з машинами і виводив інформацію на екран в праву панель, моя голова почала кипіти від того, як правильно підступитися до Model частини з Control, і передати це в View.
Єдине, що спало на думку, так це при створенні екземпляру ModelMain, передавати його в ViewMain. Але ця ідея відразу здалась поганою, оскільки, глибина інкапсуляції не надто маленька і доведеться його просто бездумно передавати з контейнера в контейнер, поки він не дійде до місця призначення. Від використання якихось статичних елементів так само відразу відмовився, так як, наскільки розумію, їх варто використовувати по мінімуму і в спеціальних випадках.

Буду дуже вдячний за будь-яку допомогу і поради!

2 Востаннє редагувалося volodimirg (07.06.2016 12:18:06)

Re: Реалізація MVC патерну в нескладному desktop додатку на Java

при створенні екземпляру ModelMain, передавати його в ViewMain.

Як на мене то у вас усі посилання повинні бути у Контролера (у Control я так розумію). Контролер звертається до моделі і модифікує графічні елементи View.

Щоб зменшити з`язки і не використовувати різноманітні поля. Я свого часу створював додаткові методи у класів, що відповідали за View, які віддавали посилання на певні панель, які в свою чергу могли віддати посилання на потрібний елемент. Ще корисно в деяких випадках використовувати синглтон, щоб не плодити кучу об'єктів для обробки подій і не передавати купу посилань на об'єкт, який повинен модифіковувати View та Model.

P.S. Оскільки у вас купа класів обробників подій, то вони одержують джерело події, тобто посилань на кнопку чи ще щось. Якщо є посилання, то можна отримати батьківський елемент, тобто посилання на панель, звідти на фрейм і т.д.  Таким чином можна рухатись по ієрархії GUI елементів. І як я вже казав можна зробити додаткові методи у фреймі і у панелях для видачі посилань на свій вміст.

Подякували: Thom Yorke1