我有以下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