Пользовательская реализация MVVM Vs. PRISM

Этот вопрос вызван этим закрытым вопросом:

Что предлагает Prism разработчику? И стоит ли это?

Я уже реализовал свои собственные реализации MVVM в корпоративных приложениях. Мне интересно знать:

  • Почему я должен изучать PRISM (в частности, PRISM, а не другие рамки MVVM)?
  • Преимущества PRISM над пользовательской реализацией MVVM и
  • Стоит ли инвестировать в изучение PRISM?

Я надеюсь, что этот вопрос не субъективен, и все, пожалуйста, не вступайте в аргументы:)

Ответ 1

Как и во многих системах, которые выполняют общую задачу для вас, вы получаете:

  • Протестировано гораздо больше глазных яблок: чем вы сами. Это (надеюсь) включает в себя модульные тесты, которые вы можете или не можете делать, создавая свою собственную инфраструктуру.
  • Более читаемый для других разработчиков. Никто не имеет опыта работы с вашей собственной инфраструктурой MVVM. Но если другой разработчик присоединяется к вашему проекту или присоединяется к вашей команде или присоединяется к вашей компании, они могут перейти прямо в код Prism.
  • Лучшая документация. В том же ключе любое новое присоединение, вероятно, должно изучить веревки, вручную собрав коллективные знания из вашего мозга и любых других пользователей в команде, и посмотрев на исходный код. У сторонних структур есть своя документация и больше сообщений в блогах в Интернете.
  • Лучшее сообщество. Вы можете задавать вопросы о StackOverflow о том, "как мне делать X с Prism?" Вы не можете спросить об этом с помощью своей пользовательской структуры.
  • Скорее всего, более способный: если вам нужно больше пользователей, чем только вы/ваша команда, добавится больше функций. Если вам нужно сделать что-то связанное с MVVM, что вы никогда не делали раньше, вероятность того, что он не встроен в вашу собственную инфраструктуру MVVM. Но это, вероятно, в Призме.
  • Лучшая структура. Предположим, вы хотели сделать что-то связанное с MVVM, но это было не в Призме. Скорее всего, для этого есть веская причина! Если что-то не в (разумно зрелой) структуре, предназначенной для работы в данном домене, то знак того, что вы пытаетесь сделать, является неестественным или неудобным способом решения проблемы. Работая с вашей собственной инфраструктурой, слишком легко сказать "о, я добавлю эту функцию", а через 6 месяцев поймут, что вы совершили огромную ошибку, потому что эта новая функция делает ваш код очень трудным для выполнения или заканчивается тем, что является вектором для лотов ошибок или чего-то еще.
  • Листинг CV:. У меня были бы смешанные чувства к найму того, кто "реализовал и использовал пользовательскую среду MVVM". Хотя это может означать, что они умны, это может также указывать на страшный "нестроенный здесь синдром". С другой стороны, размещение "Microsoft Prism MVVM Framework" среди огромного перечня технологий может быть приятным, но это не вау-эй. Лучшее из обоих миров было бы более длинным маркером, в соответствии с "Глубоким пониманием шаблона MVVM, достигнутым путем первого внедрения платформы MVVM для обучающих целей, прежде чем переключиться на MVVM Prism". Да, разница между этими тремя не собирается делать или разорвать ваше резюме, а синдром незастроенного здесь - это то, что, надеюсь, возникнет в интервью, но это просто стоит иметь в виду, особенно если вы применяете для места, которое получает достаточно резюме, они могут позволить себе выбросить все, что слегка их нервирует.

Ответ 2

PRISM может быть вам интересен, потому что это больше, чем MVVM. Да, его часть может рассматриваться как структура MVVM (все NotificationObject, EventAggregator и объекты Command - все это примеры), но она предлагает гораздо больше.

Он позволяет вам создавать составное приложение нескольких свободных пар "Модули". Он имеет очень гибкую и расширяемую навигационную среду (Region Navigation), предлагает интеграцию с контейнерами IoC (особенно Unity и MEF) и множество других функций.

Кроме того, документация (включая электронную книгу) довольно хороша и поставляется с множеством примеров и быстрыми запусками. Я считаю, что это стоит инвестиций, которых, кстати, не должно быть много.

Надеюсь, что это поможет:)

Ответ 3

Prism - это структура приложения с функциями MVVM, но не является (на мой взгляд) полнофункциональной инфраструктурой MVVM. Он предлагает минимум, необходимый для разработки базовой MVVM.

См. мой предыдущий ответ на аналогичный вопрос для разбивки рамок состава приложения и структур MVVM. Большинство приложений выбирают один из двух категорий:

Альтернативы Prism + MEF для модульных приложений MVVM

Ответ 4

С призмой и MEF вы можете создавать высоко расширяемые и поддерживаемые. Чистое приложение. С каждым модулем с собственным пользовательским интерфейсом в отдельной отдельной DLL. Единственное соединение между вашими модулями или расширениями и MainUI будет областью, в которую вы будете вводить пользовательский интерфейс вашего расширения. И верьте мне, что он очень расширяемый и поддерживаемый