2013-03-04 2 views
1

저는 초보자로서 기술적 인 세부 사항과 Windows Workflow 4.5 구현을 파헤 치고 상당한 결과를 얻었습니다. 제 질문은 "왜 그리고 언제"대 "어떻게"라는 질문이 나와 관련이 있습니다.Windows Workflow 4.5 패러다임 질문

저는 우리 모두에게 익숙한 개념을 사용하고 비즈니스 논리를 WF로 추상화했습니다. 즉, 보편적 인 로그온 프로세스입니다. MVC 웹 사이트, Windows Forms 애플리케이션 등에서 호출 할 수있는 재사용 가능한 로직을 가지고 있으며, 모든 작업을 동일한 워크 플로우로 실행하고이를 달성했습니다.

이제 "언제"WF를 적용 할 때와 코드를 사용해야하는지에 대한 두 가지 개념적 질문이 있습니다.

1 - 예를 들어 간단한 확인을하십시오. 로그인을 시도하고 있지만 빈 사용자 이름 또는 비밀번호 문자열을 전달했습니다. 분명히, 나는 끝난 사용자 "UserName Required"와 "Password Required"로 메시지를 보내고 싶다. 이제, 내가 한 방법은 유효성 검사 클래스 (FluentValidation NuGet 패키지가 중요하다)이지만 중요한 것은 코드에서이 작업을 수행하는 것입니다. WF에서 ExecuteMethod를 통해 유효성 검사 코드를 호출하면 모든 것이 올바르게 작동합니다. 내 질문은 : 이것은 WF 사고 방식에 대한 잘못된 접근입니까? 인라인 WF "If"액션/의사 결정을 수행하고 WF 내부에서 유효성 검사 메시지를 직접 작성하는 대신 코드 일부를 호출해야합니까? 나는 단지 검증을 요구하는 것이 아니라 컨셉으로서 우리 모두를 연관시킬 수 있지만 더 일반적으로 모든 것을 WF 자체에 넣거나 사용자 정의 코드를 호출하는 것이 좋을까요? 나는 WF 경험을 가진 숙련 된 소프트웨어 아키텍트의 추론과 가능한 한 다른 사람의 의견을 비교하는 것이 가장 좋습니다.

2 - 다른 컴퓨터에서 워크 플로 잡기. 따라서 동일한 로그인 워크 플로 활동의 일부에는 서비스 메소드 호출이 필요합니다. 워크 플로가 인터페이스 메서드 "AuthenticateUser"가있는 ILogOnService의 In 매개 변수를받는 방식으로 코드와 워크 플로를 작성했습니다. MVC4 웹 API 게시 메서드 (async)에서 표준 Asp.Net 멤버 ValidateUser를 호출하기 위해 전달하는 구체적인 구현입니다. 다시 말하지만, WF 워크 플로 내부에서이 웹 API PostAsync를 호출해야합니까? 그렇다면 My Workflow와 Asp.Net Membership 및 특정 서비스 선택을 긴밀하게 연관 지을 수는 없습니다. 특정 지점으로 워크 플로를 가져온 다음 다른 컴퓨터에서 프로세스를 다시 시작할 수있는 방법이있는 것으로 보입니다. 서비스가 실행되는 곳에서 프로세스를 계속 진행하지만 좋은 시도를 찾을 수는 없습니다.

이 기술 전문가들의 지침과 아이디어를 찾고 있지만 가장 유익한 답변을 선택하겠습니다.

답변

2

C# 코드를 사용하여 워크 플로의 세부 정보를 구현하는 데는 아무런 문제가 없습니다. 사실 나는 항상 사람들에게 WF4를 표준 상자 밖 활동과 함께 사용하는 경우 잘못된 일을하고 있다고 말합니다. 비즈니스를위한 비즈니스 활동을 모델링하는 사용자 정의 활동을 위해 실제로 다른 사람을 만들어야합니다. 이제는 FluentValidation을 사용하여 로그인 유효성을 검증하는 활동을 만드는 것이 좋습니다. 또 다른 시간은 낮은 수준의 WF4 활동에서 높은 수준의 비즈니스 활동을 구축 할 수 있으며,이를 귀하의 경우에 가장 적합한 것으로 결합하십시오.

조치가 짧고 일반적으로 사용할 수있는 경우 PostAsync와 같은 서비스를 호출하면 제대로 작동합니다. 그러나 SOA 스타일을 사용하게되면 실제로 temporal decoupling을 사용하기 시작하므로 하나의 서비스가 다른 서비스에 의존하지 않도록 즉시 사용할 수 있습니다. 일시적 디커플링에 빠지면 대기열을 사용하고 싶을 것입니다. 아마 MSMQ 또는 다른 유사한 기술 일 수 있습니다. 따라서 해당 대기열에서 응답 대기열이있는 편도 메시지를 보내고 워크 플로를 유휴 상태로두고 응답 메시지가 도착할 때까지 기다려야합니다. 이렇게하면 워크 플로가 다른 컴퓨터에 다시로드됩니다.이제는 그다지 적절하지 않을 수도 있습니다. 예를 들어, 로그인 할 때 멤버쉽 서비스를 사용할 수 없었기 때문에 나중에 로그인을 부여하는 데별로 도움이되지 않지만 확장 성이 뛰어나고 내결함성이있는 시스템이 될 수 있습니다. 물론이 시스템은 제대로 설계하기가 어렵 기 때문에 무료 점심은 없습니다.

+0

사용자 지정 활동이 의미가 있습니다. 나는 이미 예를 들어 간단한 WebApiActivity를 고려하고있었습니다. 매개 변수는 Baseurl, Controller, Action과 같을 것입니다. 큐 또는 간단한 "오프라인으로 작업"으로 쉽게 변환되는 적절한 분리 아키텍처로 기울어 진 것처럼 보일 수 있습니다. 우리는 일주일 후에 사용자 로그인을 할 수 없지만 귀하의 요점은 유효합니다. 여기서 대기열은 5 개의 서비스에서 LoadBalancerActivity 선택으로 대체 될 수 있습니다. WF와의 싸움이나 활동을 창조하지 않고 우아하게 각각의 설정 정보를 전달하는 방법은 어떨까요? –

+0

LogOnActivity를 만들어 나중에이를 사용자 지정 작업으로 다시 사용할 수 있다고 가정합니다. 의미하는 바는 내가 구조적으로 말하는 것을 "축소"할 때 사용자가 이미 (인증 된) 로그인되었는지 또는 LogOnActivity로 라우팅되는지를 확인하는 데 사용할 수있는 더 높은 수준의 활동이 있음을 의미합니다. BaseController OnActionExecuting 내부에서 호출하기에 좋은 워크 플로가 될 것입니다. 여기 시간을내어 주셔서 감사합니다. 불투명 한 질문입니다. –

+1

그들은 그 라인을 따라 뭔가를 시작했습니다. [HttpWorkflowService] (http://wf.codeplex.com/wikipage?title=WebAPIWorkflow)를 확인하십시오. 소스 코드도 확인하십시오. MS가 WF 활동/코드를 공개하기 전에 공개 된 코드 플렉스상의 WF는 공개되어 일부 프레임 워크 버전과 통합되었습니다. 어떻게 든 멈춘 것 같습니다. [Ron Jacobs] (http://blogs.msdn.com/b/rjacobs/)는 "리더"였지만 불행히도 그는 [잘하지 않습니다] (http://blogs.msdn.com/b/rjacobs/archive /2013/01/10/my-last-post.aspx). – Joao

관련 문제