Làm cách nào để mọi người cấu trúc mã của họ khi sử dụng thư viện không quốc tịch C#?Thư viện máy trạng thái không quốc tịch - cách thích hợp để cấu trúc?
https://github.com/nblumhardt/stateless
Tôi đặc biệt quan tâm đến cách quan hệ này với phụ thuộc tiêm, và một cách tiếp cận đúng đắn về trách nhiệm và layering một cách chính xác.
cấu trúc hiện tại của tôi liên quan đến việc sau đây:
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);
}
}
Chúng ta có nên thực hiện tất cả các quy trình (gọi đến các dịch vụ) trong vòng móc OnEntry, hoặc thực hiện các quá trình ở bên ngoài sau khi chuyển đổi trạng thái đã được xác minh rằng nó là được phép diễn ra? Tôi tự hỏi làm thế nào để làm quản lý giao dịch nếu có.
Tôi đoán những gì tôi theo sau là một số hướng dẫn tốt nhất từ những người đã triển khai một cái gì đó bằng cách sử dụng trạng thái không trạng thái và cách tiếp cận cấu trúc mã.
Nhìn vào điều này một số chi tiết, tôi đang hướng tới sử dụng một nhà máy được tiêm vào các dịch vụ miền để xây dựng đối tượng dòng công việc và điều này có thể vượt qua trong các dịch vụ theo yêu cầu của đối tượng dòng công việc. – dandcg
Vẫn đang xem xét một số hướng dẫn về cách tiếp cận tốt nhất khi sử dụng máy trạng thái. Giả sử tôi cần gọi một phương thức trên dịch vụ gửi email tồn tại trong suốt thời gian yêu cầu web. Nếu cuộc gọi này đi trong OnEntry hoặc trong phương thức công khai. Nếu nó trong OnEntry những gì sẽ xảy ra nếu có một vấn đề trong quá trình chuyển đổi? Một số hướng dẫn từ những người đã triển khai mã bằng cách sử dụng không quốc tịch và nơi họ đã đặt mã thực hiện sẽ được đánh giá cao. – dandcg