我最近在JVM/Groovy領域上幾年後回到了.NET世界。類型安全的枚舉模式在C#版本6+中仍然可行
我在C#中最喜歡的日常模式之一曾經是Type-Safe enum pattern,我發現非常方便。回到C#我立即開始使用它,但現在我懷疑可能有更好的或者更可取的模式。
讓我想到的是我想在「枚舉」中引入一些行爲。就像這樣:
public sealed class TypeSafeEnumWithBehaviour
{
public static readonly TypeSafeEnumWithBehaviour IsLowerCase = new TypeSafeEnumWithBehaviour("IsLowerCase", s => s.All(c => Char.IsLower(c)));
public static readonly TypeSafeEnumWithBehaviour IsUpperCase = new TypeSafeEnumWithBehaviour("IsUpperCase", s => s.All(c => Char.IsUpper(c)));
public readonly string Name;
public readonly Func<string, bool> IsValid;
private TypeSafeEnumWithBehaviour(string targetName, Func<string, bool> validation)
{
Name = targetName;
IsValid = validation;
}
}
測試:
[TestMethod]
public void TestMethod1()
{
Assert.IsTrue(TypeSafeEnumWithBehaviour.IsLowerCase.IsValid("apa"));
Assert.IsTrue(TypeSafeEnumWithBehaviour.IsUpperCase.IsValid("PAPA"));
}
我organizatoin目前正在使用C#6,而C#7正在成爲害得我幾個問題更爲普遍。
- 什麼是類型安全枚舉模式的當前視圖?
- 它仍然是一個有效的模式,特別是關於 序列化/持久性?
- 我應該放棄它來支持別的嗎?
鏈接是也許不是最權威的,但我認爲這說明了模式以及 – Fontanka16
從我透視圖,如果你想把枚舉引入下一層,最好把它們建模爲值對象或枚舉類。我知道它在第一眼看起來很奇怪,但至少你可以看一下:https://lostechies.com/jimmybogard/2008/08/12/enumeration-classes/ –
我以前使用過這種模式,但是我不要真的把它們視爲「枚舉」。在即將到來的語言版本中,我沒有看到任何提供這種功能的東西,所以它似乎仍然是一種有效的模式。 –