публика:Маленькое кофейное шоу Java,Веб-сайт:javaxks.com
Автор: MCTW, ссылка:cn blog on.com/duck-stability-grade…
Однажды босс нашел меня, сказав, что это простой двигатель рабочего процесса. Я проверил день, я был рабочим процессом, затем сделал следующую версию: добавить любое утверждение, чтобы сформировать связанный список, и, наконец, добавить конечный узел для записи текущего утверждения.Когда утверждение завершено, утверждающий перемещается назад
Первый уровень
Однажды мой начальник пришел ко мне и сказал сделать простой движок рабочего процесса.
Я проверил, что такое рабочий процесс в течение дня, а затем сделал следующую версию:
- Добавьте любое количество утверждающих, чтобы сформировать связанный список, и добавьте конечный узел в конце.
- Запишите текущего утверждающего, когда утверждение завершено, утверждающий перемещается на один шаг назад.
- Когда утверждающий соответствует конечному узлу, процесс завершается.
Босс: Это немного грубо.
2
Босс снова здесь: поддержать узел контрподписи.
В другой раз я проверил, что такое узел контрподписи, и обнаружил, что узел контрподписи — это большой узел со многими утверждающими.Только после того, как все в этом большом узле подтвердят его, я могу войти в следующий узел.
Я думал об этом неделю и перевернул первоначальный дизайн связанного списка:
Конструктивно я внес следующие коррективы:
- Разделите узлы на две категории: простые узлы (прямоугольники на изображении выше) и сложные узлы (круги на изображении выше).
- Используйте дерево для представления всего процесса, где узлы-листья — это простые узлы, а простые узлы — это узлы-листья.
- Каждый узел прост и имеет только утверждающих.
- Сложный узел содержит несколько дочерних узлов.
- Добавить узел скрепления: после того, как узел скрепления активирован, все подузлы могут быть утверждены.Когда все подузлы утверждены, узел скрепления завершен.
- Присоединение к последовательному узлу: дочерние узлы могут быть утверждены только в последовательности слева направо.После утверждения последнего дочернего узла завершается последовательный узел.
- Самый внешний уровень всех рабочих процессов — это последовательный узел, который представляет собой завершение всего рабочего процесса после завершения узла.
Чтобы контролировать процесс утверждения, я разработал несколько состояний узла:
- Готово: простые узлы, готовые к операциям утверждения, находятся в состоянии Готово.
- Заполните: статус узла, который был одобрен.
- Будущее: состояние узла, которое еще не достигнуто.
- Ожидание: этот статус имеют только сложные узлы, указывающие на то, что они ожидают утверждения от дочерних узлов.
С помощью приведенных выше правил процесс утверждения рабочего процесса с контрассигнированным узлом выглядит следующим образом:
Босс: Интересно.
Уровень 3
А вот и босс: поддерживать параллельные узлы.
Я целый день проверял, что такое параллельный узел, и обнаружил, что параллельный узел — это большой узел со многими утверждающими.
Затем вскоре добавляются параллельные узлы:
- Параллельный узел — это сложный узел, когда узел активен, любой дочерний узел может быть одобрен, а когда любой дочерний узел находится в завершенном состоянии, узел завершен.
Добавить новое состояние Пропустить:
- Если состояние дочернего узла параллельного узла не равно (Готово, Ожидание), состояние других одноуровневых узлов и их дочерних узлов устанавливается на Пропустить.
Возьмите каштан 🌰:
Босс: Этот дизайн добавляет новый узел быть очень удобным.
Уровень 4
Босс здесь снова: узлы должны поддерживать вложенность, например, в узле с подписью есть параллельный узел, а в параллельном узле есть сложный узел, который может быть вложен на любом уровне.
Я: На самом деле, это было поддержано~
- Бесконечно масштабируемая древовидная структура может поддерживать сколь угодно сложные процессы.
Босс: У парня что-то есть!
Уровень 5
Вот снова приходит босс: поддерживать условные узлы.
Рабочий процесс поставляется с формой, и необходимо определить, в какую ветку войти дальше, в соответствии с содержимым формы.
После нескольких дней размышлений я добавил условный узел:
- Узлы условий аналогичны параллельным узлам, за исключением того, что только дочерние узлы, соответствующие условиям, могут войти в следующее утверждение.
Босс: Я прочитал это.
Уровень 6
Босс снова здесь: есть еще два типа утверждающих, например, следующего утверждающего можно выбрать из формы, а разных утверждающих можно выбрать по разным инициаторам.
После некоторого размышления я разделил простые узлы на 3 категории:
- Первый: утверждающий записан на смерть.
- Второй: утверждающие читают из формы.
- Третий тип: расчет утверждающего на основе инициатора и функции отображения. Например, get_director ("Цянь Моу") получает Ли Моу, руководителя Цянь Моу.
Босс: Хм.
Уровень 7
Босс снова здесь: узел может быть одобрен спереди назад, может ли он быть отклонен сзади вперед?
Я: ......
Во-первых, реализована функция опровержения обратно инициатору, что равносильно запуску всего с нуля:
- Только узлы в состоянии «Готово» имеют право на отклонение. (Точно так же, как только ноды в состоянии «Готово» имеют право одобрять)
Босс: Малыш, ты ленивый.
Уровень 8
Босс снова здесь: сначала осознайте отказ и вернитесь к предыдущему утверждающему.
Отказ предыдущему утверждающему на самом деле представляет собой очень сложную логику, потому что узлы в рабочем процессе могут быть бесконечно вложены друг в друга, поэтому определить, какие утверждающие находятся в предыдущем состоянии, непросто.
Пожертвовав волосами, я, наконец, добился функции, закрывающей предыдущий уровень:
Босс: Читать.
Уровень 9
И снова босс: реализовать функцию, опровергающую любой узел.
Я нашел это требование нетрудным для достижения:
- Продолжайте отклонять предыдущий уровень до тех пор, пока узел в состоянии Готов не будет содержать узел, который нужно отклонить.
Босс: Хм.
Уровень 10 Босс снова здесь: добавьте ограничение по времени в обычный узел, если он не будет завершен в течение указанного времени, он покажет, что время истекло.
Я: Есть ли еще такая потребность?
Но все же сбылось.
В этот момент я понял, что спрос и волосы связаны отрицательно, чем больше спрос, тем меньше волос.
Уровень 11
Босс здесь снова: добавьте прокси-функцию, например, если вам есть что утвердить, но вы не уверены, то передайте тому, кто может утвердить.
Сразу же я обнаружил, что это требование принципиально отличалось от того, что было раньше: раньше отношение узлов рабочего процесса было фиксированным с самого начала, то есть оно определялось до того, как процесс был инициирован.
Но теперь вы должны измениться во время процесса одобрения.
Это не что иное, как некоторые дополнительные занятия и некоторое выпадение волос, и, наконец, разработан следующий план:
- Суть операции прокси заключается в том, чтобы создать новый параллельный узел как родительский узел этого узла, а затем создать новый родственный узел для размещения прокси, чтобы и он сам, и прокси могли его одобрить.
- Операция прокси может быть бесконечно вложенной, то есть прокси тоже может найти кого проксировать.
Уровень 12
Босс снова здесь: Можете ли вы добавить функцию отмены прокси?
. . . Я уже польщен, так что добавлю:
- Агент отмены — операция счетчика прокси
- Если доверенность была одобрена, доверенность нельзя отменить.
Уровень 13
Босс здесь снова: добавьте предварительное и постусловие к каждому узлу.Только когда предварительное условие будет выполнено, узел может быть введен, и узел может быть одобрен только тогда, когда будет выполнено постусловие.
Мое сердце: а босс до свидания, ах босс до свидания до свидания до свидания до свидания!
Мой рот: Хороший босс, получил получил.
Позже: Позже я действительно добавил пре- и постусловия в каждую ноду, а заодно удвоил соответствующий код логики утверждения.
Уровень 14.
Босс снова идет: рабочий процесс теперь очень сложный, требуется много времени, чтобы воспользоваться преимуществами рабочего процесса для каждого в процессе: интуитивно показывает процент текущего утверждения.
Я получил.
На самом деле, по сравнению с предыдущими требованиями, это несложно, потому что не требует изменений основной логики, суть в том, чтобы ввести древовидную структуру и вывести целое число в соответствии со статусом разных узлов.
После тестирования и размышлений окончательный план выглядит следующим образом:
- Процент завершения рабочего процесса относится к расстоянию от крайнего правого узла «Готово» до крайнего левого узла/расстоянию до крайнего правого узла в дереве.
Уровень 15
Босс снова здесь: можете ли вы прикрепить два исполняемых скрипта к каждому узлу и выполнить их после утверждения узла и завершения утверждения?
Я получил.
Позже, конечно, я понял эту функцию, и в то же время я также обнаружил, что был лысым в расцвете сил.
постскриптум
Босс - талантливый студент, окончивший Университет Цинхуа. Иначе он, вероятно, не смог бы придумать столько гениальных потребностей. Позже босс продал эту систему документооборота такой компании, как Guang* Securities. Я также отправился в другие компании, чтобы продолжить свою карьеру Я думал, что у меня есть будущее.
Когда я начал этот рабочий процесс, я только что закончил бакалавриат, и когда я ушел из этой компании, я посмотрел в зеркало и выглядел старым. Это было уже 3 года назад, и мне до сих пор страшно, когда я вспоминаю те дни, когда я работал сверхурочно, чтобы изменить свой рабочий процесс.
В конце концов, я надеюсь, что все мои коллеги в мире не будут иметь клопов, будут здоровы телом и духом и накопит достаточно денег, чтобы купить два люкса в городе первого уровня.Через несколько лет они смогут жить неспеша жизнь на пенсии без болезней и бед.