Я могу пропустить что-то вроде этого, если это дело - включите это обсуждение в качестве части моего вопроса:).
Это сокращенный и переименованный образец рабочего кода. GetTicks (..) - это единственный образец, который может быть любой функциональностью (значение > 0 < 9
должно возвращать определенный Enum a.so).
public static class Something
{
public enum TypeOf : short
{
Minute = 2, Hour = 3, Day = 4, ........
}
public static long GetTicks(Something.TypeOf someEnum)
{
long ticks = 0;
switch (someEnum)
{
case Something.TypeOf.Minute:
ticks = TimeSpan.TicksPerMinute;
break;
case Something.TypeOf.Hour:
ticks = TimeSpan.TicksPerHour;
break;
....
}
return ticks;
}
}
// This class is called from anywhere in the system.
public static void SomeMethod(string dodo, object o, Something.TypeOf period)
{
// With the design above
long ticks = Something.GetTicks(period);
// Traditional, if there was a simple enum
if (period == Something.Day)
ticks = TimeSpan.FromDays(1).Ticks;
else if (period == Something.Hour)
ticks = TimeSpan.FromHours(1).Ticks;
}
Идея состоит в том, чтобы собирать функциональные возможности, относящиеся к перечислению, как можно ближе к самому перечислению. Функция перечисления является причиной. Также мне легко и естественно искать такую функциональность рядом с перечислением. Также его легко модифицировать или расширять.
Недостаток, который у меня есть, заключается в том, что я должен указать enum более явным Something.TypeOf
. Дизайн может выглядеть нестандартным? и будет применяться, если перечисление предназначено для внутреннего использования в классе.
Как бы вы сделали это более приятным? Я попробовал абстрактное, базовое наследование, частичное. Ни один из них, похоже, не применяется.