Шаблоны проектирования для событийной логики - PullRequest
3 голосов
/ 07 мая 2009

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

Ряд структур данных заполняется проанализированными данными. Соответствие между файлами и структурами данных не однозначное, на самом деле это может быть довольно сложно.

Состояния приложения и переходы между состояниями зависят от содержимого (и их доступности в данный момент) этих фрагментов загружаемой информации.

Неясный код spagetti обрабатывает все события загрузки и взаимозависимости.

Я некоторое время работал над неким шаблоном, чтобы работать с ним более единообразно, но подумал, что сообщество разработчиков уже определило наиболее подходящие методы и шаблоны. Кто-нибудь знает что-нибудь?

Ответы [ 5 ]

3 голосов
/ 08 мая 2009

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

Я также должен согласиться с Джоном для паттерна Observer, вы можете использовать его для создания необходимой инверсии зависимостей и легко обрабатывать переходы состояний.

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

2 голосов
/ 07 мая 2009

Я уже некоторое время интенсивно работаю с шаблоном Model-View-ViewModel и очень рекомендую его. Хотя большинство статей об этом в Интернете прочно связывают его с WPF, нет никаких причин не использовать его с другими технологиями. Я использовал его против веб-службы, клиента WPF и командной строки (три «Представления», разделяющие нижние уровни).

Вот мое быстрое и грязное описание: Шаблон состоит из трех уровней (сверху вниз): View (обычно с графическим интерфейсом, но на самом деле это любой внешний интерфейс), ViewModel (содержащий бизнес-логику и рабочий набор данных) и Model (доменные объекты и т. Д.). Каждый уровень связывается непосредственно с уровнем (ами) ниже и запускает события для уровня (ов) выше.

В земле .Net шаблон в значительной степени опирается на интерфейс INotifyPropertyChanged. Когда ваши структуры данных в Модели изменятся, они могут вызвать событие. ViewModel может обновлять свое состояние (состояние приложения) в ответ и запускать свои события. Затем представление можно обновить, чтобы отобразить новое состояние приложения.

Вот достойная статья: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

Еще раз, эта статья ориентирована на WPF.

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

1 голос
/ 07 мая 2009

Состояния приложения и переходы между состояниями зависит от содержания (и их доступность на данный момент) из этих кусков загруженных информация.

Похоже, вам нужно использовать многоуровневые шаблоны. В приведенном выше примере я имею в виду использование шаблона стратегии, расположенного поверх шаблона состояния.

0 голосов
/ 07 мая 2009

Как насчет Model View Controller (MVC) ?

0 голосов
/ 07 мая 2009

Вероятно, одним из самых известных шаблонов проектирования для систем, управляемых событиями, является шаблон наблюдателя .

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