Использование интерфейса по сравнению с MVVM Light Messenger для запросов данных

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

В подобных ситуациях я всегда создаю интерфейс для обмена данными, а затем передаю этот интерфейс плагинам, чтобы они могли запрашивать данные, когда это необходимо. Однако недавно я начал использовать набор инструментов MVVM Light, потому что в нем есть такие замечательные функции, как RelayCommand и Messenger. В этом случае я полностью вижу использование Messenger - плагинам не нужен интерфейс, потому что они могут просто использовать Messenger.Default.Send<MyDataRequestMessage>(...). Пока они регистрируют обработчик приема, все в порядке ... или нет?

Какому методу вы бы предпочли и почему?


person Dave    schedule 07.09.2010    source источник


Ответы (2)


В случае с плагинами агрегатор вроде мессенджера MVVM Light вполне подойдет; в качестве альтернативы вы можете посмотреть MEF (теперь часть .Net 4), который также включает автоматическое обнаружение и другие такие приятные функции, и с ними вы можете использовать интерфейсы. Так что ответ в зависимости от ситуации :) Лично я предпочел бы Messenger из-за его простоты, если только он не предназначен для очень большого корпоративного проекта.

person Alex Paven    schedule 07.09.2010
comment
В настоящее время я уже использую MEF + интерфейс данных. Мне также нравится Messenger, потому что он упрощает работу, но я просто недостаточно знаком с ним, чтобы сразу знать все его потенциальные предостережения. - person Dave; 07.09.2010
comment
Я не знаю ни одного, я уже использовал его в двух средних проектах, и я доволен результатами. Кроме того, если вы обнаружите какие-либо недостатки, можно легко изменить код, чтобы исправить или обойти их: P - person Alex Paven; 08.09.2010

Как сказал Алекс, MEF был создан именно для этой цели. Если вам нужно управлять надстройками, вы, вероятно, в конечном итоге скопируете много работы, которую MEF предоставляет вам, если вы ее не используете.

Нет причин, по которым вы не можете использовать одновременно MEF и MVVM Light. Ваша идея связи вашего плагина с вашим приложением с помощью мессенджера MVVM light интригует, и я надеюсь, что это сработает для вас. Однако имейте в виду, что любой подключаемый модуль может зарегистрироваться для получения тех же сообщений, и в результате вы можете получить один подключаемый модуль, получающий сообщения от другого подключаемого модуля. Возможно, это не проблема для вас, но если вы не контролируете, кто пишет эти расширения, у вас определенно есть дыра в безопасности.

Удачи!

person Matt Casto    schedule 13.09.2010
comment
спасибо - я какое-то время использую MEF в своем приложении, и мне он очень нравится, и я бы использовал его для всего, если бы отладка составов деталей не была такой болезненной. Вы должны проверить мой последний вопрос на stackoverflow.com/questions/3696893/, что напрямую связано с этим вопросом. В итоге я пошел по маршруту MEF и столкнулся с интересной проблемой! - person Dave; 13.09.2010