私はモデルを持っておりEnquiry
、これは次の 2 つの状態のいずれかになります (他にもありますが、この目的のために 2 つだけを比較New
します) Closed
。問い合わせの状態は、ユーザーが問い合わせに対して何ができるかによって異なります。たとえば、終了した問い合わせは削除できませんが、新しい問い合わせは削除できます (基本的な例)。
これを維持したいのですが、Entity Framework
方法がわかりません。以下は私のコードです。
問い合わせ:
public class Enquiry
{
public int Id { get; set; }
public string CustomerAccountNumber { get; set; }
public EnquiryState CurrentState { get; set; }
public bool CanAddLines { get { return CurrentState.CanAddLines; } }
public bool CanDelete { get { return CurrentState.CanDelete; } }
public void ChangeState(EnquiryState currentState)
{
CurrentState = currentState;
}
public void CloseEnquiry()
{
CurrentState.CloseEnquiry();
}
/* More methods to change state here */
public Enquiry()
{
CurrentState = new NewEnquiryState(this);
}
}
お問い合わせの状態:
public abstract class EnquiryState
{
internal readonly Enquiry CurrentEnquiry;
protected EnquiryState(Enquiry currentEnquiry)
{
CurrentEnquiry = currentEnquiry;
}
public virtual bool CanDelete
{
get { return false; }
}
public virtual bool CanAddLines
{
get { return false; }
}
/* More properties here */
public abstract void CloseEnquiry();
/* More states here */
}
新しいお問い合わせの状態:
public class NewEnquiryState : EnquiryState
{
public NewEnquiryState(Enquiry enquiry) : base(enquiry) { }
public override bool CanDelete
{
get { return true; }
}
public override bool CanAddLines
{
get { return true; }
}
/* ... */
public override void CloseEnquiry()
{
CurrentEnquiry.ChangeState(new CloseEnquiryState(CurrentEnquiry));
}
/* ... */
}
CloseEnquiryState:
public class CloseEnquiryState : EnquiryState
{
public CloseEnquiryState(Enquiry enquiry) : base(enquiry) { }
public override bool CanAddLines
{
get { return false; }
}
public override bool CanDelete
{
get { return false; }
}
/* ... */
public override void CloseEnquiry()
{
throw new Exception("Closed Enquiry can't be closed");
}
}
私の質問は、これらのさまざまな状態をデータベースに保存する方法がわかりません。int
各状態で何らかのフィールドを使用Enquiry
し、FK を介してそれらをマップする必要がありますか? CanAddLines
また、フィールドとCanDelete
データベースもマップする必要がありますか? ロジックがステート内に含まれているため、ステート パターン パラダイムにはまったく新しい