또 다른 자동화 도서관.그물


모티프
내가 이 라이브러리의 용도를 설명하기 전에 내가 왜 그것을 개발하기 시작했는지 설명하는 것이 매우 중요하다.
2020년 9월에 나는 중풍에 걸렸다.이로 인해 나는 반신 마비 외에 각종 인지 문제, 예를 들면 주의력 부족, 언어 능력 상실, 이해력, 시력 문제... 좋은 칵테일 한 잔을 받았다.몇 달 동안의 재활 치료와 각종 치료사의 귀중한 업무를 통해 나는 내 생명이나 적어도 생명의 일부분을 회복할 수 있을 것 같다.
일단 상처가 가장 심각한 단계가 지나가면 나는 내가 도대체 무슨 일이 일어났는지 다시 깨닫기 시작한다. 한 가지 일이 내 머릿속에 걸려 있다. 나는 내가 다시 일을 시작할 수 있는지, 아니면 프로그래밍을 다시 시작할 수 있는지 확실하지 않다.이것은 어떤 치료사도 나를 도울 수 없는 것이다.나는 오른손을 회복하고 임무를 재구성하며 주의력을 유지하기 위해 매일 일한다. 그러나 처음부터 다시 프로그래밍을 하는 것은 나 혼자서 해야 할 일이다.
그래서 저는 자신에게 도전을 하고 맞춤형 재활 계획을 세우기로 했습니다. - 이것은 나로 하여금 30분 내에 정신을 지치지 않고 집중하게 할 것이다.나는 계획을 세우고 그것을 따를 수 있어야 한다. 일이 계획대로 진행되지 않을 때, 나는 절대적인 낙담에 빠지지 않을 것이다.그렇게 많은 물건이 있다니!당시, 솔직히 이런 일들은 나에게 매우 어려웠다.

우리는 그것으로 무엇을 할 수 있습니까?
프로세스 자동화에 전문적으로 사용되는 라이브러리를 왜 사용합니까?20년 넘게 작업하면서 내부나 외부 시스템(예를 들어 결제망)과 통합하는 데 많은 시간을 들였고 전용 응용 프로그램에서 이러한 통합을 실현하는 몇 가지 전략을 보았는데 예를 들어 BPM, ESB, 맞춤형 시스템 등이다.통합은 직접적인 'A' 가 'B' 를 호출하는 것이 아니라 특정한 논리인 'A' 가 'B' 를 호출하고 결과가 'C' 이거나 업무 스크롤과 관련된 잘못된 제어가 있을 때 문제가 시작된다.
편성을 담당하는 코드는 통상적으로 집적(데이터 매핑, 안전성 등)과 편성 간의 직책 분리를 잃게 된다.코드가 가독성을 잃어 재사용과 테스트가 어려워졌다.
이 도서관의 건립은 모든 약점을 완화시키는 데 목적을 두고 있다.그것은 다양한 장면을 포함하고 편성에 대한 봉인과 독립적인 테스트를 허용한다.또한 하나의 서비스를 만드는 것처럼 흐름을 만들고 코드의 재사용을 추진할 수 있습니다. 왜냐하면 우리는 흐름의 정의를 사용하여 자신의 라이브러리를 만들 수 있기 때문입니다.
이 라이브러리에 대한 자세한 내용은 해당 라이브러리의 GitHub 페이지를 참조하십시오.
[ https://github.com/LHPiney/magnett-automation-core ]

예.
saga 모드의 기본 예시를 사용해서 이 라이브러리를 사용하는 방법을 보여 줍니다.

우리는 편성 버전을 사용하여 전설적인 모델을 만들어 보려고 한다. 우리는 두 가지 서비스, 주문 서비스와 지불 서비스를 제공할 것이다.이 프로세스는 결제 결과에 따라 주문 상태를 유지합니다. 다음은 이 프로세스의 정의입니다.
`
공통 정적 클래스 정의
{
공통 정적 IFlowDefinition 정의 {get;}
static SagaPatternDefinition()
{
    Definition = FlowDefinitionBuilder.Create()
        .WithInitialNode(CreateOrder.Create(NodeName.CreateOrder))
            .OnExitCode(CreateOrder.ExitCode.Created).GoTo(NodeName.PreAuthorizePayment)
        .Build()

        .WithNode(PreAuthorizePayment.Create(NodeName.PreAuthorizePayment))
            .OnExitCode(PreAuthorizePayment.ExitCode.PreAuthorized).GoTo(NodeName.ConfirmPayment)
            .OnExitCode(PreAuthorizePayment.ExitCode.Denied).GoTo(NodeName.CancelPayment)
        .Build()

        .WithNode(ConfirmPayment.Create(NodeName.ConfirmPayment))
            .OnExitCode(ConfirmPayment.ExitCode.Done).GoTo(NodeName.ConfirmOrder)
            .OnExitCode(ConfirmPayment.ExitCode.Failed).GoTo(NodeName.CancelPayment)
        .Build()

        .WithNode(ConfirmOrder.Create(NodeName.ConfirmOrder)).Build()     

        .WithNode(CancelPayment.Create(NodeName.CancelPayment))
            .OnExitCode(CancelPayment.ExitCode.Done).GoTo(NodeName.CancelOrder)
        .Build()

        .WithNode(CancelOrder.Create(NodeName.CancelOrder)).Build()

        .BuildDefinition();
}
}
`
완전한 예
Saga pattern example

미래.
앞으로, 나는 표준 라이브러리에 몇 개의 미리 정의된 노드 유형을 추가함으로써 이 라이브러리를 완성하고 싶다. 예를 들어 API 호출, 조건 노드, soap 서비스 등이다.나는 또 흐름을 다른 흐름(자류)의 노드로 모으고 싶다.
또한 저는 runner급에서 분포식 환경에서 일할 가능성을 증가시켜 일부 작업 흐름을 병행적으로 집행할 수 있도록 하고 테스트 흐름의 특정한 확장을 통해 흐름의 추적 가능성과 테스트 능력을 향상시킬 계획입니다.
우리는 곧 몇 편의 문장부터 이 라이브러리form scratch를 어떻게 사용하여 완전한 시스템을 구축하는지 소개할 것이다.
물론 이 프로젝트에 대한 건의, 피드백 또는 합작을 환영합니다.

부언
나는 이 글을 시작할 때 내가 이렇게 하도록 촉구한 동기를 평론했기 때문에, 이 글을 끝낼 때 1년여 동안 내가 계속 일하고 개선하도록 격려해 준 사람들에게 감사를 드리고 싶다.하지만 가장 중요한 것은 나와 함께 고생해 온 사람들, 그리고 나에게 이 모든 일을 해줄 수 있는 가장 큰 동력을 준 사람들, 그곳에 있어줘서 고마워, 네가 한 모든 것에 고마워, 다이애나.

좋은 웹페이지 즐겨찾기