Я колись розпочав проект MVVM / WPF, який згодом був розроблений та розгорнутий, і для цього я вивчив багато рамок Caliburn.Micro MVVM. Справа в тому, що я в кінцевому підсумку не використовував Caliburn.Micro для цього, і в кінцевому підсумку я реалізував деякі концепції MVVM (конкретно, просто ViewModelBase
і RoutedCommand
класи).
Тепер мене призначили дещо масштабнішим проектом за такими ж напрямками: "Однокористувацький клієнт, який працює в режимі офлайн на робочому столі", так би мовити, і я вирішив використовувати Caliburn.Micro. І ось тут починається моя «проблема».
Я читав у цій відомій публікації в блозі , назва якої говорить, що "Якщо ви використовуєте MVVM, тоді вам потрібна рамка", що:
"Спроба зробити щось на кшталт MVVM без фреймворку - це величезна робота. Тони дублювання коду, винахід колеса і перекваліфікація людей думати інакше .
Принаймні, використовуючи рамки, ви уникаєте дублювання коду і, сподіваємось, не доведеться винаходити колесо - дозволяючи зосередитись на перенавчанні людей. Частина перенавчання, як правило, неминуча, але рамка забезпечує сантехнічний код та структуру, що полегшує процес. "
Я погодився б у першому читанні, але мій фактичний досвід роботи з Caliburn.Micro (CM) у моєму реальному застосуванні полягає у незрозумілості та дезорієнтації. Тобто, рамки зовсім не полегшили процес, навпаки. Читання постійно повторюваних прикладів, наданих Роб Айзенбергом у досить (занадто) неформальній документації, та намагання вивести схеми використання з суперечливо наданих зразків та їх абсолютно непрямих зв’язків між класами та інтерфейсами, де речі, здається, покликані працювати на основі побічні ефекти, здаються по-людськи неможливими, якщо ви не досвідчений геній (вибачте за рент, але я думаю, ви знаєте, що я маю на увазі).
Не кажучи вже про те, що будь-який вище тривіальний сценарій, як видається, передбачає контейнери IoC, з чим я ніколи не працював, і який, здається, вирішує проблему, з якою я навіть не можу бути . Мені не подобається витрачати більше годин на проект, вивчаючи ці речі, а не думати про мою проблему та сферу застосування. Я просто хотів банана, але КМ дав мені горилу (IoC), що тримає кошик з бананами.
Тепер, коли я розглядаю можливість повернутися до своєї базової системи MVVM - що складається лише з кількох класів, характерних для MVVM, які я насправді хочу реалізувати - я хотів би принаймні дати шанс CM, якщо я щось тут втрачу, або просто відверто робити речі «неправильним шляхом» із чистого досвіду та незнання. І ось питання:
Існує поширений консенсус, що "рамки полегшують і природніші речі", але якщо я трапляюсь зовсім навпаки, чи означає це, що я не повинен використовувати рамки, або що я намагаюся навчитися цьому неправильно? Чи є поняття, що я в першу чергу навіть не повинен використовувати рамки? Або є якийсь "правильний" спосіб розібратися, як використовувати CM для простого розвитку MVVM?
RelayCommand
реалізацію (оскільки він "пов'язує" безпосередньо методи, звичайно, замість прив'язки до властивостей ICommand).
RelayCommand
іншу бібліотеку, якщо та, яка використовується Caliburn Micro, не працює для вас.
EventAggregator
для обміну повідомленнями, а такожNotificationObject
для ViewModelBase та MVVM LightRelayCommand
для команд. Важливо - визначити, які проблеми рамки збираються вирішити для вас, і використовувати лише ці рішення. Не відчувайте, що ви змушені використовувати всю рамкову бібліотеку.