,比如我有以下的域模型:如何處理字典表中的數據的基礎
class Order {
public virtual int Id {get; protected set;}
public virtual BaseStatus Status {get; set;}
}
abstract class BaseStatus {
public virtual int Id {get; protected set;}
public abstract string Name {get;}
}
class Approved : BaseStatus {
public override string Name
{
get { return "Approved"; }
}
}
所以,現在我wan't已經是兩個表,Orders
和Statuses
。訂單表將有StatusId
列。 問題是關於更改訂單狀態的API。如果我這樣做:
order.Status = new Approved();
這將導致在狀態表中創建新行。 目前我已經創建了下面的幫助:
class StatusesFactory {
ISession session;
public StatusesFactory(ISession session){
this.session = session;
}
public GetStatus<T> where T : BaseStatus, new() {
T status = session.QueryOver<T>.SingleOrDefault();
if(status == null){
status = new T();
session.SaveOrUpdate(status);
}
return status;
}
}
而當我想設置狀態我用這樣的代碼:
order.Status = statusesFactory.GetStatus<Approved>();
它似乎做工精細,但很複雜,沒有理由。我使用NHibernate,但我認爲同樣的問題可能適用於任何ORM。這種事情的原因是容易部署在空數據庫上,以便在首次請求時填充它。
- 如何處理字典表?
- 我的方法是否有明顯的缺陷,我看不到?
的一個問題,我在這裏看到的是,當我需要得到所有可能的狀態,我不能使用如下代碼:
session.QueryOver()名單();
因爲不是所有的狀態都可能被創建。 那你覺得呢?
不能滿足Order Sta土族? – 2011-04-19 09:05:31
想要使用狀態模式 – Sly 2011-04-19 09:08:06