У меня есть проект, в котором его деятельность и функции следуют за последовательным процессом, большую часть времени. Но иногда вам нужно «вернуться» к своим шагам и повторить предыдущие функции.Есть ли альтернатива шаблону Посредника с Collegue «без дела»?
Я сделал диаграмму состояния, чтобы увидеть, насколько это было бы сложно.
Первым подходом, который, как я думал, является применение государственного образца, но количество государств не представляется возможным. Затем «я разделил» и классифицировал его в 6 процессах. А классы черта каждого процесс, что я представлял себе что-то вроде этого:
TProcessXXX = class(TProcess)
private
{* atributos privados, etc.. *}
public
{* funciones y actividades *}
procedure DoActivity1;
procedure DoActivity2;
{* ... *}
function DoActivityN: TResultProcess;
end;
Большинства мероприятий они в каждом процессе работы на тот же класс, который инкапсулирует структуру данных, необходимую. И мое намерение состоит в том, что каждый процесс может оповещать, что закончился для другого процесса, а затем следующего задания.
Дизайн, который я видел, является шаблоном посредника и имеет класс, который инкапсулирует диаграмму состояний и «разрешает» каждому процессу. Для координации между собой я рассмотрел возможность добавления методов для общения с классом координатора/посредника. В том числе:
function TProcess.RequestPermission: boolean;
procedure TProcess.NotifyFinishOperation(Result: TResultOperation);
В процессе я разработал их с некоторой независимостью.
Что касается того, что вы не просите разрешения на каждое действие, а для некоторых требуется некоторое избыточное упорядочение и снова и снова спрашивать, я применил «блокировку», которая позволяет их включить.
TProcessXXX.PrepareToWork;
var req: boolean;
begin
req: = RequestPermission;
then begin if req
EnableActivitys
Work;
end;
end;
Пока все хорошо. Мои сомнения начинались, когда из слоя Presentation вызывают операции. Чтобы получить разрешение, чтобы вызвать у меня есть окольный от слоя Презентации к посреднику: Презентация -> TProcessXXX -> Посредник А потом мы получили разрешения другого по каждому виду деятельности: Представление -> TProcessXXX -> TDataStructure
Когда процесс получает разрешение, захватывает для себя, используя TDataStructure. Он берет на себя, пока операция не будет завершена. Между тем, другие процессы «простаивают». И с уровня презентации может возникнуть необходимость в ненужном запросе.
Я считал отключить элементы управления, что является самым простым и легким. Но тогда нужно будет постоянно включать и отключать.
Я спрашиваю: какие альтернативы вы рекомендуете? Есть ли образец для работы над темой «бездействующих процессов»?
EDIT:
Я изучал альтернативы, такие как стратегии и Visitor, но я не уверен, если они являются лучшим вариантом. И я признаю, что, возможно, эти 3 шаблона (Посредник, Стратегия, Посетитель) не доминируют на 100%. Я забыл прояснить это. Мои извинения.
Я также хотел бы добавить, что если я заслуживаю отрицательного голоса, по крайней мере, будьте любезны, чтобы опубликовать комментарий, объясняющий почему.
EDIT 2:
В соответствии с рекомендациями, я прикрепил ссылку на картину диаграммы состояний:
В диаграмме вы можете увидеть, что есть Choise. Предназначен для того, чтобы при запуске оценивалось, какое из последних состояний достигнуто, и продолжить с этого момента.
На этой диаграмме у меня есть отдельные действия в пяти процессах: настройка, управление набором, обучение, тестирование и распознавание.
И я добавил еще один шестой именованный инициализатор, который имеет функцию инициализации структуры данных с данными, доступными из базы данных.
Каждый процесс является коллегой для посредника. Посредник реализует эту диаграмму состояния и решает обработать его «разрешение» на работу.
Я не был тем, кто отклонил ваш вопрос, но я верю, что причина для downvote заключается в том, что Stack Owerflow предназначен для решения конкретных проблем с кодированием, когда вы спрашиваете об использовании правильного шаблона проектирования. Я верю, что задать свой вопрос на http://cs.stackexchange.com/ будет больше. – SilverWarior
Я видел другие подобные вопросы, что-то старое, и не было никаких возражений и полученных ответов. Еще один отрицательный голос, и если кто-то ставит добрые намерения. Поскольку я не смотрел, что тролли в SO ходят, играя отрицательное голосование. У кого власть должна контролироваться. – Delphius
Выполнены ли какие-либо из ваших действий (многопоточность)? – SilverWarior