Бизнес логика в Enums? - PullRequest
       20

Бизнес логика в Enums?

6 голосов
/ 30 июля 2010

Считается ли хорошей практикой помещать какую-либо бизнес-логику в Enums? Не очень интенсивная логика, а скорее удобные вспомогательные методы. Например:

public enum OrderStatus {

 OPEN, OPEN_WITH_RESTRICTIONS, OPEN_TEMPORARY, CLOSED;


 public static boolean isOpenStatus(OrderStatus sts) {
      return sts == OPEN || sts == OPEN_WITH_RESTRICTIONS || sts == OPEN_TEMPORARY;
 }

}

Ответы [ 5 ]

16 голосов
/ 30 июля 2010

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

Если это позволяет вам писать более простой код и код SOLID , почему бы нет?

10 голосов
/ 30 июля 2010

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

public enum OrderStatus {

 OPEN, OPEN_WITH_RESTRICTIONS, OPEN_TEMPORARY, 
 CLOSED {
   @Override isOpen() { return false; }
 };

 public boolean isOpen()
 { 
   return true;
 }
}
5 голосов
/ 30 июля 2010

Я часто использую Enums для единичных экземпляров. Таким образом, они содержат почти только бизнес-логику. Будучи классами, которые расширяют Enum, они могут даже реализовывать интерфейсы.

Я бы рассмотрел использование Enums только в том случае, если оно соответствует перечисленным значениям, т. Е. Логика бизнеса тесно связана с экземплярами.

2 голосов
/ 30 июля 2010

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

1 голос
/ 30 июля 2010

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

...