Как сообщения (не исключения) должны передаваться из уровня Модель / Бизнес-объект в пользовательский интерфейс? - PullRequest
1 голос
/ 11 апреля 2011

Использование VB.net 4.0

У меня есть приложение Winforms, которое свободно основано на MVVM. Я ищу простой способ для любого слоя (даже тех, на которые пользовательский интерфейс не имеет ссылки) передавать сообщения обратно в пользовательский интерфейс для отображения пользователю.

Я достиг этого в прошлом, создав класс «Коммуникатор» в «Общей» сборке, на которую ссылалась бы каждая другая сборка.

Public Class Communicator

Public Shared Sub NotifyUser(Message as string)
    RaiseEvent SendMessage(Message)
End Sub

Public Shared Event SendMessage(MessageToSend as string)

End Class 

Пользовательский интерфейс будет подписываться на событие SendMessage при запуске программы. Любой класс, желающий передать сообщение пользователю, просто вызовет метод Shared NotifyUser, а класс Communicator передаст данное сообщение в пользовательский интерфейс через событие SendMessage.

Достоинством этого метода является то, что его легко реализовать и он очень прост в использовании из любого места вашего кода.

Полагаю, недостатком этого является то, что вызовы NotifyUser распределяются по всему коду, что делает многие классы зависимыми от класса Communicator и его общего метода. По какой-то причине это просто кажется неправильным.

Итак, мой вопрос: каковы некоторые типичные способы достижения того же эффекта без значительного увеличения сложности?

1 Ответ

1 голос
/ 11 апреля 2011

Честно говоря, все хорошо (с учетом минусов, на которые вы указали). Другой вариант - шаблон Mediator , более или менее похожий на тот, который вы реализовали, только без событий.

...