2010-11-12 1 views
0

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

  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

ответ

0

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

0

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

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

0

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

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

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

0

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

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