我有以下数据库模型:

**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的讨论。

10-06 07:35