C# stateless 라이브러리를 사용할 때 사람들은 어떻게 코드를 구성합니까?상태 비 저장 상태 머신 라이브러리 - 적절한 구조?
https://github.com/nblumhardt/stateless
나는 방법에 특히 관심이 주입 종속성이 관계 및 책임의 올바른 접근 방법과 제대로 레이어링.
나의 현재 구조를 포함 다음
public class AccountWf
{
private readonly AspNetUser aspNetUser;
private enum State { Unverified, VerificationRequestSent, Verfied, Registered }
private enum Trigger { VerificationRequest, VerificationComplete, RegistrationComplete }
private readonly StateMachine<State, Trigger> machine;
public AccountWf(AspNetUser aspNetUser, AccountWfService userAccountWfService)
{
this.aspNetUser = aspNetUser;
if (aspNetUser.WorkflowState == null)
{
aspNetUser.WorkflowState = State.Unverified.ToString();
}
machine = new StateMachine<State, Trigger>(
() => (State)Enum.Parse(typeof(State), aspNetUser.WorkflowState),
s => aspNetUser.WorkflowState = s.ToString()
);
machine.Configure(State.Unverified)
.Permit(Trigger.VerificationRequest, State.VerificationRequestSent);
machine.Configure(State.VerificationRequestSent)
.OnEntry(() => userAccountWfService.SendVerificationRequest(aspNetUser))
.PermitReentry(Trigger.VerificationRequest)
.Permit(Trigger.VerificationComplete, State.Verfied);
machine.Configure(State.Verfied)
.Permit(Trigger.RegistrationComplete, State.Registered);
}
public void VerificationRequest()
{
machine.Fire(Trigger.VerificationRequest);
}
public void VerificationComplete()
{
machine.Fire(Trigger.VerificationComplete);
}
public void RegistrationComplete()
{
machine.Fire(Trigger.RegistrationComplete);
}
}
우리가 OnEntry 후크 내 (서비스 호출), 또는 외부의 프로세스를 구현하는 모든 프로세스를 구현해야 상태 전이가 인 것을 확인 한 후 자리를 차지할 수 있습니까? 그렇다면 트랜잭션 관리를 어떻게 수행해야하는지 궁금합니다.
나는 무언가를 이미 구현하고 코드 구조에 접근하는 방법을 구현 한 사람들로부터 가장 좋은 지침이 될 것으로 생각한다.
이보다 좀 더 나는 워크 플로 개체를 생성하기 위해 도메인 서비스에 주입 된 팩토리를 사용하는 방향으로 기울어 져 있으며 워크 플로 개체에 필요한 서비스를 전달할 수 있습니다. – dandcg
상태 시스템을 사용하는 최선의 방법에 대한 지침을 계속 찾고 있습니다. 웹 요청의 수명 동안 존재하는 이메일 전송 서비스에 대한 메소드를 호출해야한다고 가정 해보십시오. 이 호출은 OnEntry 또는 public 메서드 내에서 호출해야합니다. OnEntry에서 전환하는 동안 문제가 발생하면 어떻게됩니까? 무국적자를 사용하여 코드를 구현 한 사람들과 실제 코드를 작성한 사람들의 지침은 크게 감사하겠습니다. – dandcg