我有以下数据库模型:
**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
所以根据我的理解,状态就像一个用于域逻辑检查的值对象。但它也需要出现在db模型中,以表示一个干净的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
最佳答案
aprevious question of mine发现了一些有用的链接,我怀疑这些链接与你的问题有关,特别是吉米·博加德对Enumeration Classes的讨论。