Как обновить пользовательский интерфейс с бизнес-уровня? - PullRequest
6 голосов
/ 20 июня 2010

У меня есть трехслойное приложение в C #. На бизнес-уровне у меня много потоков, которые выполняют одну и ту же работу. Я хочу показать прогресс каждого потока в интерфейсе пользователя, но у меня нет ссылки на уровень представления.

Как я могу это сделать? Какой лучший способ для этого?

Спасибо.

Ответы [ 2 ]

6 голосов
/ 20 июня 2010

Наиболее подходящий ответ здесь, вероятно, - выставить event где-нибудь на вашем бизнес-уровне. Ваш код пользовательского интерфейса может подписаться на событие и обрабатывать событие, переключаясь на поток пользовательского интерфейса (при необходимости) и обновляя себя.

Тогда бизнес-коду не нужно знать о пользовательском интерфейсе, и он может работать так же без любого пользовательского интерфейса (но, как и для всех делегатов / обратных вызовов, вам нужно проверить на null перед попыткой для вызова делегата).

4 голосов
/ 20 июня 2010

Самый простой способ для пользовательского интерфейса - передать бизнес-уровень вызываемому делегату (или интерфейсу), чтобы он мог указывать на прогресс.

Это также очень легко проверить, потому что это разделяет проблемы: в тестах вашего бизнес-уровня вы можете пройти тестовый делегат и убедиться, что он вызван. В ваших тестах пользовательского интерфейса вы можете подделать бизнес-уровень и сделать вид, что есть прогресс, вызвав соответствующего делегата и проверив, что пользовательский интерфейс обновляется соответствующим образом.

...