Как правильно смоделировать свойство true / false в моем домене? - PullRequest
1 голос
/ 24 августа 2011

Представьте, что у меня есть домен с сущностью , и одним из свойств этой сущности является true / false свойство, подобное Active / Inactive .

Как правильно моделировать это?

  1. Используете логическое значение? False = неактивно и True = активно ?
  2. Использование Enum:

    public enum Status { Active = 1, Неактивно = 2 }

Я думаю, использование Enum является правильным способом, но использование свойства Boolean , которое я также вижу, не является неправильным.

Что вы, ребята из DDD, думаете об этом?

Ответы [ 3 ]

1 голос
/ 25 августа 2011

Я бы сказал, что перечисления существуют только для этих случаев, чтобы избежать сопоставления концепций с примитивными типами или классами.

Например, избегать сопоставления логики 2 значений с логическим значением или для большего количества значений (например, цветов).семафора: красный, зеленый, желтый) с целыми числами 1, 2, 3.

Перечисления существуют только для того, чтобы этого избежать, и чтобы было понятно, что означает каждый из них, улучшая разборчивость иобслуживаемость , а также безопасность типов (вы можете ограничить метод только получением типа Enum, а не более широкого типа Boolean, это делает ваш код более безопасным).

1 голос
/ 24 августа 2011

Если это пара истина / ложь, то логическое значение - это просто ИМХО.Не нужно слишком усложнять вещи.

Если значение используется в качестве параметра метода, перечисление или даже класс могут быть лучше для удобства чтения.Но опять же, вы можете вместо этого рассмотреть возможность вызова двух разных методов.

Возможная проблема с enum заключается в том, что можно использовать недопустимые значения.Это можно смягчить с помощью такого класса:

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;

Он может использоваться как перечисление, но гарантирует, что недопустимые значения недопустимы.

0 голосов
/ 25 августа 2011

Используйте перечисления, когда вам нужен конечный автомат.
Enum говорит, что флаги являются взаимоисключающими и тесно связаны между собой.

например. - если в игре RPG есть класс Воин, он может иметь состояния «Живой» или «Мертвый». Те не могут быть правдивыми одновременно. Поэтому - здесь имеет смысл использовать перечисления.

Напротив: воин может сражаться / бегать / пить / говорить / есть / спать. Здесь мы не можем использовать enum, потому что они не являются взаимоисключающими (Воин должен иметь возможность бегать кругами, размахивая мечом и кушая бутерброд).

...