Какой шаблон дизайна для этого? - PullRequest
3 голосов
/ 21 мая 2009

У меня есть процесс, похожий на рабочий процесс, предположим, что это так:

  1. Подготовка
  2. Ешьте
    • Отнеси свои вещи в корзину
    • Уберите со стола

Теперь я хочу, чтобы пользователь даже отменял событие «Ешь», которое я хочу, чтобы он «Очистил стол», то же самое касается этапов «Подготовка» и «Возьмите вещи в мусорное ведро».

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

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

Ответы [ 5 ]

11 голосов
/ 21 мая 2009

Это решается с помощью шаблона State . Если вы протестируете логику, все пройдет гладко.

7 голосов
/ 21 мая 2009

Звучит как Шаблон метода шаблона .

Или вы можете сделать это с помощью композиции и Шаблон стратегии .

Если у вас сложная логика, тогда Шаблон состояний может быть лучше.

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

Если вы работаете в C ++: Приобретение ресурсов - это инициализация .

Эта проблема, как правило, не была хорошо решена в языках без какой-либо детерминированной финализации (C #, Java и т. Д.)

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

State Pattern, мой firend - вот что заставит эту работу в конце.

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

В C # /. NET у нас есть шаблон IDisposable. Я уверен, что вы могли бы реализовать нечто подобное на другом языке, независимо от того, есть ли у него сборщик мусора (хотя реализация будет немного отличаться).

Что касается этого аспекта рабочего процесса, я бы просто следовал шаблону проектирования веб-сервисов в WCF (то есть методам Begin и Cancel). Если вы не считаете это излишним для ваших обстоятельств, Windows Workflow Foundation может быть лучшим вариантом.

...