Re[6]: Бизнес-слой управляет другим слоем
От: Sinclair Россия https://github.com/evilguest/
Дата: 09.06.19 10:32
Оценка:
Здравствуйте, es3000, Вы писали:

E>Пример почтового клиента не подходит.

E>Почтовый клиент просто принимает письма. Он не выполянет никаких специфических действий.
И это — правильно.

E>Я же спрашиваю про такую ситуацию, когда UI инициировал некоторую асинхронную операцию в BL.

E>И по окончании этой операции должен показать ее результат.
Ну, во-первых, ничего он не должен. Главный тут нe BL и не UI, а пользователь.
Я же вам приводил уже пример — возможно, пользователь сейчас показывает презентацию на большом экране. UI, который вдруг решает "показать результат асинхронной операции" тут нафиг не нужен.
Логичным является сделать специальный раздел в UI, что-то типа "история операций", где видно, какая операция когда была запрошена, каков её прогресс (если известно), когда ожидается завершение (если известно).
Если статус — "готово", то с оповещением могут быть связаны результаты, которые можно увидеть, кликнув по ним.

E>Мы говорили, что когда BL закончит операцию, он сформирует нотификацию.

E>Но, поскольку операции в BL выполняются асинхронно, например, разными клиентами с разных ПК, то в BL будет много нотификаций в очереди.
E>Как конкретный клиент найдет именно свою нотификацию о той операции, которую он инициировал?
Смотря как вы это спроектируете. Посмотрите на это под другим углом: важно не "какой клиент инициировал операцию", а кто заинтересован в результате.
В простом случае у нас есть личность пользователя. Тогда каждый клиент должен выгребать оповещения обо всех операциях, инициированных текущим пользователем. Независимо, естественно, от того, через какого клиента был выполнен запрос. То есть я могу заказать отчёт с мобильного телефона, а потом сесть за десктоп, и получить оповещение о готовности отчёта.
В более сложном случае у каждого оповещения есть группа заинтересованных пользователей. Например, "готовность квартального отчёта" получает все пользователи с ролью "бухгалтерия".
"исчерпание свободного места в разделе для временных данных" получают все с ролью "администрирование IT ресурсов".

S>>Наверное, из содержимого нотификации. А вы как думаете?


E>Это значит, что нотификации должны быть объектами разных классов.

E>Либо содержать данные в виде объектов-данных разных типов.
E>Так как данные в нотификации могут быть разными в зависимости от типа операции.
E>Так?
Совершенно необязательно. У вас какая версия Windows? Если 10, то вы, наверное, заметили, что их notification center способен показывать оповещения о совершенно разных событиях — и об исчерпании места на диске, и о приходе почты, и вообще о чём угодно. Достаточно сделать так, чтобы внутри оповещения была сохранена "ссылка" на то действие, которое оно предлагает пользователю выполнить.
Для отчёта, к примеру, основным действием будет "открыть окно отчёта", вместе с параметрами, которые указывают на конкретный экземпляр отчёта.

Это позволит вам избежать необходимости полностью переписывать ту часть клиента, которая отвечает за обработку оповещений, после добавления каждого типа оповещений.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.