Как спроектировать систему на основе мастера с учетом SoC? - PullRequest
1 голос
/ 10 мая 2010

Я создаю систему Windows Forms (на C #, если это важно для всех), которая предоставляет услугу автоматизации приложений. Поскольку это приложение предназначено для пользователей, не разбирающихся в компьютерах, я решил упростить для пользователя работу с помощью интерфейса мастера. Я бы не хотел связывать представления и механизм просмотра (из которого будет создан мастер) с механизмом автоматизации.

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

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

Если кому-то нужны дополнительные детали, чтобы помочь придумать какую-то идею, пожалуйста, дайте мне знать, и я буду рад предоставить их.

1 Ответ

1 голос
/ 10 мая 2010

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

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

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...