В Java я использую Enum
, а затем EnumSet
, чтобы сгруппировать различные перечисления, представляющие похожее поведение.
Что-то вроде:
enum MyConditions {
condition_A;
condition_B;
condition_1;
condition_100;
condition_xyz;
... more ...
}
EnumSet<MyConditions> group1 = EnumSet.of(condition_A, condition_xyz);
EnumSet<MyConditions> group2 = EnumSet.of(condition_B, condition_xyz);
EnumSet<MyConditions> group3 = EnumSet.of(condition_xyz);
... and many more...
Причина различных EnumSet
я хочу проверить, принадлежит ли конкретное условие группе 1 или группе 2 или группе 3 и т. Д.
Мне кажется, что дизайн немного сложен, так как я должен продолжать делать все больше и больше EnumSet
для разных условий, а дизайн не поддерживает подгруппы. Например, объединение group1 & 2 для проверки родительского условия.
Другое предложение, которое я предлагаю, - предоставить группу в самой конструкции enum.
Что-то вроде:
enum MyConditions {
condition_A(group1);
condition_B(group2);
condition_1;
condition_100;
condition_xyz(group1, group2);
... more ...
}
Это также не очень хорошо, так как это делает читаемость Enum
проблемой при наличии нескольких групп.
Enums
- это статические данные, которые соответствуют некоторому целому числу из стороннего API. Да, я хочу динамически создавать отношения группы условий или, если я определяю вручную, то, по крайней мере, несколько чище, чем в настоящее время. Помимо простого нахождения определенного условия в определенной группе, существует несколько групп, которые могут представлять аналогичное условие. Например, если вызывающая сторона запрашивает условие, и если это не часть группы 1, а группа 2. Мы хотели бы сказать «нет, это не часть группы 1, а часть группы 2». Это предполагает, что group1 и group2 были помечены как похожие. Но давайте предположим, что существует отдельная группа 3, и если пользователь спрашивает, является ли она условной частью группы 3, мы просто хотим сказать «нет, она не является частью группы 3»
Есть идеи о том, что такое хороший дизайн здесь?