Как люди структурируют свой код при использовании библиотеки 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 или в общедоступный метод. Если в OnEntry это происходит, если во время перехода есть проблема? Некоторые рекомендации от людей, которые внедряют код с использованием апатридов и где они разместили фактический код, будут очень благодарны. – dandcg