Domain driven design 什么';在我的域中建模真/假属性的正确方法是什么?

Domain driven design 什么';在我的域中建模真/假属性的正确方法是什么?,domain-driven-design,Domain Driven Design,假设我有一个具有实体的域,该实体的一个属性是真/假属性,类似于活动/非活动 正确的建模方法是什么 使用布尔值False=Inactive和True=Active 使用枚举: 公共枚举状态 { 活动=1, 非活动=2 } 我认为使用Enum是正确的方法,但是使用布尔属性也没有错 你们DDD的人是怎么想的?如果它是真/假对,那么布尔值就是好的。没有必要把事情过分复杂化 如果将该值用作方法参数,枚举甚至类的可读性可能会更好。但是,同样,您可以考虑调用两种不同的方法。 枚举可能存在的问题是,可能会使用无

假设我有一个具有实体的域,该实体的一个属性是真/假属性,类似于活动/非活动

正确的建模方法是什么

  • 使用布尔值False=InactiveTrue=Active
  • 使用枚举:

    公共枚举状态 { 活动=1, 非活动=2 }

  • 我认为使用Enum是正确的方法,但是使用布尔属性也没有错


    你们DDD的人是怎么想的?

    如果它是真/假对,那么布尔值就是好的。没有必要把事情过分复杂化

    如果将该值用作方法参数,枚举甚至类的可读性可能会更好。但是,同样,您可以考虑调用两种不同的方法。 枚举可能存在的问题是,可能会使用无效值。这可以通过使用以下类来缓解:

    public class ActivityState {
        public static ActivityState Active = new ActivityState();
        public static ActivityState Inactive = new ActivityState();
    }
    
    ...
    
    // in your entity:
    
    public ActivityState IsActive { get; set; }
    
    this.IsActive = ActivityState.Active; // or
    this.IsActive = ActivityState.Inactive;
    

    它可以像枚举一样使用,但要确保不允许有无效值。

    我想说,枚举仅用于这些情况,以避免将概念映射到基元类型或类

    例如,避免将2值逻辑映射为布尔值,或将更多值(如信号量的颜色:红、绿、黄)映射为整数1、2、3


    枚举的存在只是为了避免这种情况,为了明确它们各自的含义,提高可读性和可维护性,以及类型安全性(您可以将方法限制为只接收枚举类型,而不是更广泛的布尔类型,这会使代码更安全).

    需要状态机时使用枚举。
    Enum说,标志是相互排斥和密切相关的

    例如,如果我们在RPG游戏中有一个战士类,它可以有“活着”或“死”的状态。这些不可能同时是真实的。因此,在这里使用枚举是有意义的


    相反,战士可以战斗/奔跑/喝酒/说话/吃饭/睡觉。这里我们不能使用enum,因为它们不是相互排斥的(战士应该能够在挥舞剑和吃三明治的时候绕圈奔跑)。

    Entity.isActive()
    不行?@Rekin不,因为我使用的是Entity Framework,我需要将此属性公开。