我有以下DB模型:DDD:枚舉等實體
**Person table**
ID | Name | StateId
------------------------------
1 Joe 1
2 Peter 1
3 John 2
**State table**
ID | Desc
------------------------------
1 Working
2 Vacation
和域模型將被(簡化):
public class Person
{
public int Id { get; }
public string Name { get; set; }
public State State { get; set; }
}
public class State
{
private int id;
public string Name { get; set; }
}
的狀態可能會在域邏輯例如可以使用:
if(person.State == State.Working)
// some logic
因此,從我的理解,國家就像一個價值對象,用於域邏輯檢查。但是它也需要存在於數據庫模型中才能表現清晰的ERM。使用這種方法的國家的名字將被硬編碼到域
public class State
{
private int id;
public string Name { get; set; }
public static State New {get {return new State([hardCodedIdHere?], [hardCodeNameHere?]);}}
}
但是:
所以狀態可能會擴展到。
你知道我的意思嗎?對於這樣的事情有沒有標準的方法?從我的角度來看,我想要做的是將一個對象(從ERM設計角度來看是持久的)用作我的域中的一種價值對象。你怎麼看?
問題更新: 也許我的問題還不夠清楚。
我需要知道的是,我將如何使用存儲在我的域邏輯中的數據庫中的實體(如狀態示例)。爲了避免這樣的事情:
if(person.State.Id == State.Working.Id)
// some logic
或
if(person.State.Id == WORKING_ID)
// some logic
由於您的國家在數據庫中有一個ID,所以它們是實體(值對象由其屬性標識,而不是ID)。也許你應該刪除它們並將值直接存儲在相應的數據庫表中? – ZeissS 2010-02-11 14:46:18