有一個任務與狀態變化相關。我非常困惑,認爲它應該是一種基於事件的方法,其中涉及諸如CQRS
之類的內容,或者我可以使用State pattern
並將所有邏輯留在實體內。使用併入了狀態模式的域模型
我發現它顯示了一個域模型(或一塊吧),其採用了一種狀態模式的文章:http://www.prowareness.com/blog/?p=1448
訂貨系統非常接近我的域模型。所以這個例子很棒。但是我仍然想知道考慮MVC模式是否是一種好的做法,並且如果可以使用RavenDB/NHibernate
來實現?
編輯:問題重新考慮
讓我們效仿的榜樣:
首先,這裏是一個域的實體,稱爲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; }
}
}
鑑於AbstractState
是:
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; }
}
}
及國有工廠接口的定義如下:
public interface IStateFactory {
AbstractState GetState(String state);
}
最終的想法是把方法:
public void AlterState(String stateString) {
this.state = stateFactory.GetState(stateString);
}
- 是設計好的?什麼是利弊?
- 可擴展性如何?從我的角度來看,可以擴展/實施自己的國有工廠。但是,如果
AbstractState
本身發生變化,則所有內容都會相應更改。
謝謝!
是的,我很感興趣))! – lexeme 2012-08-01 05:56:39