Có một tác vụ được kết nối với trạng thái thay đổi của một thực thể. Và tôi khá bối rối khi nghĩ rằng nó có phải là một cách tiếp cận dựa trên sự kiện có liên quan đến một cái gì đó như CQRS
hoặc tôi có thể sử dụng một State pattern
và để lại tất cả logic bên trong thực thể.Sử dụng mô hình miền được kết hợp với mẫu Nhà nước
Tôi đã tìm thấy một bài báo trong đó cho thấy một mô hình miền (hoặc một phần của nó) có sử dụng một mô hình nhà nước: http://www.prowareness.com/blog/?p=1448
hệ thống đặt hàng là khá gần với mô hình tên miền của tôi. Vì vậy, ví dụ là rất tốt. Nhưng tôi vẫn tự hỏi nếu nó là một thực hành tốt xem xét mô hình MVC và nếu nó có thể thực hiện với RavenDB/NHibernate
?
EDIT: Câu hỏi rethought
Hãy làm theo các ví dụ:
Thứ nhất, đây là một thực thể miền gọi Idea
:
[Serializable]
public class Idea : AbstractEntity<Guid> {
private static IStateFactory stateFactory;
private AbstractState state = new InitiatedState();
[Required, StringLength(150)]
public String Title { get; set; }
[Required]
public String ProblemContext { get; set; }
public DateTime CreatedOn { get; set; }
public Guid InitiatorId { get; set; }
[Required]
public Decimal InvestmentAmount { get; set; }
public Boolean IsInitiated {
get { return this.state.IsInitiated; }
}
public Boolean IsRejected {
get { return this.state.IsRejected; }
}
public Boolean IsUnderInitialAssessment {
get { return this.state.IsUnderInitialAssessment; }
}
public Boolean IsConfirmedForImplementation {
get { return this.state.IsConfirmedForImplementation; }
}
}
Trong khi AbstractState
là:
public abstract class AbstractState {
public virtual Boolean IsInitiated {
get { return true; }
}
public virtual Boolean IsRejected {
get { return false; }
}
public virtual Boolean IsUnderInitialAssessment {
get { return false; }
}
public virtual Boolean IsConfirmedForImplementation {
get { return false; }
}
}
và nhà máy nhà nước giao diện được định nghĩa như thế này:
public interface IStateFactory {
AbstractState GetState(String state);
}
ý nghĩ cuối cùng là đưa phương pháp:
public void AlterState(String stateString) {
this.state = stateFactory.GetState(stateString);
}
- là thiết kế ok? những khuyết điểm và ưu điểm là gì?
- Điều gì về khả năng mở rộng? Từ quan điểm của tôi, người ta có thể mở rộng/thực hiện nhà máy riêng của nhà nước. Nhưng nếu có thay đổi trong số
AbstractState
thì mọi thứ sẽ thay đổi tương ứng.
Cảm ơn!
Vâng, tôi khá quan tâm))! – lexeme