Я починаю проект шкільної групи на Java, використовуючи Swing. Це просто графічний графічний інтерфейс на настільному додатку Database.
Професор подав нам код минулорічного проекту, щоб ми могли побачити, як він робить справи. Моє початкове враження полягає в тому, що код набагато складніший, ніж повинен був бути, але я думаю, що програмісти часто думають про це, дивлячись на код, який вони не просто писали.
Я сподіваюся знайти причини, чому його система хороша чи погана. (Я запитав професора, і він сказав, що побачу пізніше, чому це краще, що мене не влаштовує.)
В основному, щоб уникнути будь-якого зв’язку між його стійкими об'єктами, моделями (бізнес-логіка) та поглядами, все робиться за допомогою рядків. Постійні об'єкти, які зберігаються в базі даних, - це хештелі рядків, а моделі та представлення "підписуються" один на одного, надаючи рядкові клавіші для "подій", на які вони підписані.
Коли подія запускається, представлення або модель надсилає рядок усім своїм підписникам, які вирішують, що робити для цієї події. Наприклад, в одному з методів прослуховування дій перегляду (я вважаю, що це просто встановлює bicycleMakeField на стійкий об'єкт):
else if(evt.getSource() == bicycleMakeField)
{
myRegistry.updateSubscribers("BicycleMake", bicycleMakeField.getText());
}
Цей виклик врешті-решт потрапляє до цього методу в моделі транспортного засобу:
public void stateChangeRequest(String key, Object value) {
... bunch of else ifs ...
else
if (key.equals("BicycleMake") == true)
{
... do stuff ...
Професор каже, що такий спосіб робити речі є більш розтяжним і доцільним, ніж представлення просто викликає метод на об'єкті бізнес-логіки. Він каже, що між поглядами та моделями немає зв'язку, оскільки вони не знають про існування один одного.
Я вважаю, що це гірший вид з’єднання, тому що вигляд і модель повинні використовувати однакові рядки, щоб працювати. Якщо ви видалите подання чи модель або зробите помилку друку в рядку, ви не отримаєте помилок компіляції. Це також робить код набагато довшим, ніж я думаю, що це має бути.
Я хочу обговорити це з ним, але він використовує свій досвід галузі, щоб протистояти будь-яким аргументам, які я, недосвідчений студент, можу висловити. Чи є якась перевага в його підході, яка мені не вистачає?
Для уточнення я хочу порівняти вищезазначений підхід, маючи вигляд, очевидно, поєднаний з моделлю. Наприклад, ви можете передати об'єкт моделі транспортного засобу на вигляд, а потім змінити "марку" транспортного засобу, зробіть це:
vehicle.make = bicycleMakeField.getText();
Це зменшило б 15 рядків коду, які в даний час використовуються ТОЛЬКО для встановлення марки транспортного засобу в одному місці, до одного читаного рядка коду. (Оскільки ця операція робиться сотні разів у всьому додатку, я думаю, це було б великим виграшем для читабельності, а також безпеки.)
Оновлення
Ми з моїм керівником команди реструктурували основу так, як ми хотіли це зробити, використовуючи статичний набір тексту, повідомили професора і, нарешті, дали йому демонстрацію. Він досить щедрий, щоб дозволити нам використовувати наші рамки до тих пір, поки ми не попросимо його допомоги, і якщо ми зможемо підтримувати решту нашої команди на швидкість - що нам здається справедливим.