我有以下的数据库模型:
**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
据我理解,状态(State)类似于值对象,用于域逻辑检查。但它还需要在数据库模型中存在,以表示一个清晰的实体关系映射。
因此状态可能会被扩展为:
public class State
{
private int id;
public string Name { get; set; }
public static State New {get {return new State([hardCodedIdHere?], [hardCodeNameHere?]);}}
}
然而,使用这种方法状态名称将被硬编码到域名中。
你知道我的意思吗?是否有标准的方法来处理这种情况?从我的角度来看,我试图在我的领域中使用一个对象(从ERM设计的角度来看是持久化的),作为一种值对象。你怎么想?
问题更新: 可能我的问题表述不太清楚。
我需要知道如何在我的领域逻辑中使用存储在数据库中的实体(例如"State"示例)。以避免出现类似以下代码的情况:
if(person.State.Id == State.Working.Id)
// some logic
或者if(person.State.Id == WORKING_ID)
// some logic