想象一下,我有一个实体的域名,此实体的一个属性是 true / false 属性,例如 Active / Inactive
对此进行建模的正确方法是什么?
使用枚举:
公共枚举状态 { 有效= 1, 无效= 2 }
我认为使用枚举是正确的方法,但使用布尔属性我也看到没错。
你们DDD的人对此有何看法?
答案 0 :(得分:1)
如果它是真/假对,那么布尔值就好了恕我直言。无需过度复杂化。
如果该值被用作方法参数,则枚举或偶数类可能更好以提高可读性。但话说回来,你可以考虑改用两种不同的方法。
枚举可能存在的问题是,人们可能会使用无效值。这可以通过使用这样的类来减轻:
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;
它可以像枚举一样使用,但要确保不允许使用无效值。
答案 1 :(得分:1)
我想说Enums只针对这些情况,以避免将概念与原始类型或类映射。
例如,避免使用布尔值映射2值逻辑,或者使用整数1,2,3来更多值(如信号量的颜色:红色,绿色,黄色)。
Enums只是为了避免这种情况,并明确其中的每一个含义,提高易读性和可维护性,以及类型安全(你可以限制一个方法只接收你的枚举类型,而不是更广泛的布尔类型,这使你的代码更安全。)
答案 2 :(得分:0)
需要状态机时使用枚举。
恩欧姆说,旗帜是相互排斥的,密切相关。
E.g。 - 如果我们在RPG游戏中有一个Warrior类,它可以有“Alive”或“Dead”状态。那些不能同时是真实的。因此 - 在这里使用枚举是有意义的。
相比之下:战士可以战斗/跑步/喝酒/说话/吃饭/睡觉。在这里我们不能使用enum,因为那些并不是相互排斥的(Warrior应该能够在挥动剑和吃三明治的同时绕圈跑。)