Информация об изменениях

Сообщение Re: Кто должен инициировать курсор-часики на время длительны от 18.03.2017 8:02

Изменено 18.03.2017 8:24 Sinix

Re: Кто должен инициировать курсор-часики на время длительных операций?
Здравствуйте, ylem, Вы писали:

Y>Логика? Вроде бы нет, потому что в конце концов может она сейчас без UI крутится или UI не блокирует.

Y>UI? Вроде бы тоже нет, потому что откуда ему знать, какие операции логики потребуют часиков.

Внезапно, это один из немногих примеров, не котором можно объяснить IoC.

У нас есть UI, который может, но не знает когда.
У нас есть биз-логика, которая знает когда, но по определению не может.

Особого выбора тут нет, только спрятать часть "я могу показывать уведомления" за события / интерфейс и подсовывать её в бизнес-логику.
В коде будет выглядеть так же, как и у тебя, но ничего не мешает допилить до прогресса / возможности отмены, аля
using (var scope = notifyService.OpenLongRunningScope("бла-бла-бла"))
{
  // ...
  scope.NotifyProgress(0.1, "...");
  // ...
  if (scope.CancelRequested) return ...;
  // ...
}

(нормальные имена лень придумывать).

Какие ещё варианты?
Re: Кто должен инициировать курсор-часики на время длительны
Здравствуйте, ylem, Вы писали:

Y>Логика? Вроде бы нет, потому что в конце концов может она сейчас без UI крутится или UI не блокирует.

Y>UI? Вроде бы тоже нет, потому что откуда ему знать, какие операции логики потребуют часиков.

Внезапно, это один из немногих примеров, на котором можно объяснить IoC.

У нас есть UI, который может, но не знает когда.
У нас есть биз-логика, которая знает когда, но по определению не может.

Особого выбора тут нет, только спрятать часть "я могу показывать уведомления" за события / интерфейс и подсовывать её в бизнес-логику.
В коде будет выглядеть так же, как и у тебя, но ничего не мешает допилить до прогресса / возможности отмены, аля
using (var scope = notifyService.OpenLongRunningScope("бла-бла-бла"))
{
  // ...
  scope.NotifyProgress(0.1, "...");
  // ...
  if (scope.CancelRequested) return ...;
  // ...
}

(нормальные имена лень придумывать).

Какие ещё варианты?