какой шаблон проектирования подходит для этого требования рабочего процесса? - PullRequest
0 голосов
/ 12 ноября 2010

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

  1. каждому заданию присваивается порядковый номер, и задания должны выполняться в последовательности
  2. , однако существует ряд заданий, которые можно запускать в любом порядке.и у каждого из них может быть свой путь.например, когда A и B завершены, D, E, F можно запустить в любом порядке, но может быть правило, что G может работать только после того, как D готов, H может работать только после того, как E сделал что-то подобное.
  3. некоторые задания могут быть запущены, если успешно выполнено одно из предыдущих параллельных заданий.если заданиями являются A, B, C, D и A, B, C можно запускать в любом порядке, а D можно запускать только при завершении A, B или C.
  4. некоторые задания могут быть запущены, только если все предыдущие параллельные задания завершены.в приведенном выше примере, например, может существовать правило, такое как D, если A и B и C завершены
  5. есть несколько контрольных точек, что означает, что после завершения задания контрольной точки ни одна из предыдущих не может быть выполнена повторно, включаязадание контрольной точки.

каким-то образом мне нужно иметь возможность выразить условие для задания, которое можно оценить во время выполнения.что-то вроде E = (A и B) OR (C и D);это означает, что задание E может выполняться, если A и B успешны, ИЛИ C и D. успешны.

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

технология, которая будет использоваться: ASP.NET 3.5, C # 3.0, SQL Server 2008

Ответы [ 5 ]

0 голосов
/ 17 декабря 2010

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

0 голосов
/ 15 ноября 2010

каждому заданию присваивается порядковый номер и задания должны быть выполнены в последовательность

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

0 голосов
/ 12 ноября 2010

http://code.djangoproject.com/wiki/GoFlow/sampleprocess, что мне помогло.Это мощная архитектура

0 голосов
/ 12 ноября 2010

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

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

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

0 голосов
/ 12 ноября 2010

Похоже, вы захотите взглянуть на Workflow Foundation, в WF4 есть класс WorkflowApplication, который позволяет вам легко встраивать рабочий процесс в приложение с графическим интерфейсом.

Ознакомьтесь с разделами «Рабочий процесс размещения в WPF» и «Рабочий процесс размещения в форме Windows» на этой странице: http://www.packtpub.com/article/hosting-workflow-applications-microsoft-windows-workflow-foundation-40

...