у нас идет дискуссия о ЛУЧШЕЙ ПРАКТИКЕ из архитектуры .NET ТОЧКА ЗРЕНИЯ ПРОЕКТА:
Задача: Как управлять видимостью на основе ролей в пользовательском интерфейсе с помощью enum?
Например: я хочу показать все типы команд [a, b, c, d, e] администратору, но только типы команд [a, b, c] обычному пользователю.
Сначала у меня есть enum, который включает все типы команд:
public enum TeamType { a, b, c, d, e }
Я использую это так:
if (IsAdminitrator())
comboboxTeamtypes.Items.AddRange(Enum.GetNames(typeof(TeamType)));
Теперь я должен решить, как реализовать условие else. Поскольку перечисления не могут быть унаследованы, у меня есть два альтернативных подхода:
1) Должен ли я ввести другое перечисление, относящееся к другой роли:
public enum TeamTypeOthers {a, b, c }
и тогда я бы получил:
else
comboboxTeamtypes.Items.AddRange(Enum.GetNames(typeof(TeamTypeOthers)));
2) Или я должен забыть о создании какого-либо специфичного для роли перечисления TeamTypeOthers и просто зациклить исходные значения перечисления TeamType в коде пользовательского интерфейса:
else
{
foreach (TeamType teamtype in Enum.GetValues(typeof(TeamType)))
{
if (asdf == TeamType.a)
comboboxTeamtypes.Items.Add(teamtype);
else if (asdf == TeamType.b)
comboboxTeamtypes.Items.Add(teamtype);
if (asdf == TeamType.c)
comboboxTeamtypes.Items.Add(teamtype);
}
}
Я думаю, что первое решение красивое и чистое (хотя повторяющееся, которое не так приятно). Но теперь я также принимаю решение об использовании enum в более глубокой архитектуре, чем в решении 2, что, вероятно, плохо и поддерживает использование решения 2. Для меня решение 2 уродливо и грязно, потому что я не люблю культивирование циклов вокруг кода.