1.33M
Категория: ПрограммированиеПрограммирование

Система управления бизнес процессами

1.

Система
управления
бизнес
процессами
Подготовил: Крико Павел ФИТ-201
Научный руководитель: Шарун Иван Владимирович

2.

Обработка сообщений
Действия
Например, обработка
файла, запись/чтение в
БД и так далее
Потоки
управления
IF-ELSE, SWITCH, WHILE
и так далее

3.

MS Workflow Foundation

4.

Пример кода
public class WhileActor : IActor{
private bool isExecuting = false;
public void HandleMessage(IActorMessage message){
if (message is ActivityMessage activityMessage){
if (!isExecuting && activityMessage.Status.IsExecuting){
isExecuting = true;
Run(activityMessage);}
else { isExecuting = activityMessage.Status.IsExecuting;}}}
private void Run(ActivityMessage activityMessage){
while(activityMessage.Condition.Evaluate
(activityMessage.Context)){
activityMessage.Activity.Execute(activityMessage.Context);
}
}
}

5.

Тест с Moq
var activityMock = new Mock<IActivity>();
var contextMock = new Mock<IContext>();
var statusMock = new Mock<IStatus>();
var conditionMock = new Mock<IActivityCondition>();
int callCount = 0;
//Setup while condition
conditionMock.Setup(condition=>condition.Evaluate
(It.IsAny<IActivityContext>())).Returns(() => (++callCount) <= 2);
var actor = new WhileActor();
actor.HandleMessage(new ActivityMessage{
Activity = activityMock.Object, Context = contextMock.Object,
Condition = conditionMock.Object, Status = statusMock.Object});
// Assert
activityMock.Verify(activity=>activity.Execute(contextMock.Object),
Times.Exactly(2));

6.

MoveCmd:
If CheckFuel
BurnFuel
Explode
Move
Формальное описание
правил игры
(?i)Команда включает: если(?:\s*(?:CheckFuel|CheckAmmo и
так далее))*\s*затем(?:\s*(?:Move|Shoot|Rotate|и так
далее))*\s*иначе(?:\s*(?:Move|Shoot|Rotate|и так далее))*

7.

КС грамматика и ANTRL

8.

КС грамматика и ANTRL

9.

Пример кода
[Fact]
public void Current_string_respond_grammar(){
string pathToTextFile = "../../../ParserTests/TestText.txt";
// Создание входного потока ANTLR из файла XML
string str = File.ReadAllText(pathToTextFile);
// Создание входного потока ANTLR из файла XML
AntlrInputStream input = new AntlrInputStream(str);
// Создание лексера
GameLexer lexer = new GameLexer(input);
// Создание токен-стрима на основе лексера
CommonTokenStream tokens = new CommonTokenStream(lexer);
// Создание парсера
GameParser parser = new GameParser(tokens);
Assert.Equal(0, parser.NumberOfSyntaxErrors);
}

10.

Плюсы использования в ВКР
01
Гибкость и
выразительность
02
Проверка на
раннем этапе
03
Удобство
разработки
04
Интеграция
с ЯП

11.

Спасибо за
внимание!
English     Русский Правила