Я ищу хороший способ реализации иерархической структуры строк с использованием перечислителей или (абстрактных) классов.Иерархическая структура строк в Java. Каковы альтернативы для большого?
Я сделаю это, чтобы организовать права доступа к функциям приложения, поскольку эти разрешения сохраняются в базе данных, и мне нужно каким-то образом отслеживать функции в Java-коде для проверки прав пользователя.
Я знаю, что некоторые альтернативы, например:
public abstract class FeaturePermissions {
public enum AppOne implements IEnum {
SomeFeature("permission name 1");
private String name;
FeatureOne(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
public enum AppTwo implements IEnum {
SomeFeature("permission name 2");
private String name;
AppTwo(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
}
И я могу позвонить с помощью:
FeaturePermissions.AppOne.SomeFeature.getName()
Но я хотел бы отделить AppOne и AppTwo в разных файлах перечислений, но сохраняющий вызов выше, потому что это перечисление будет действительно большим в будущем (например, 200 записей каждый).
Я буду использовать это в коде в двух ситуациях.
- Аннотация:
@HasPermission(FeaturePermissions.AppOne.SomeFeature.getName())
- Условный:
if(user.hasPermission(FeaturePermissions.AppOne.SomeFeature.getName())
Какой самый лучший способ сделать это? И если мне нужно больше «уровней», например, FeaturePermissions.AppOne.BigFeature.SomeFeature.getName()
, какая лучшая стратегия?
Спасибо!
Возможно, вам нужна карта? –
Звучит плохой дизайн, который не будет хорошо масштабироваться. – duffymo
@duffymo, и это не очень хороший дизайн. Но эти разрешения, сегодня, находятся по всему коду и дублируются. Я пытаюсь собрать их, но я принимаю другие решения :) – Dherik