4
使用struct强制验证内置类型
通常,域对象具有可以用内置类型表示的属性,但是其有效值是可以用该类型表示的值的子集。 在这些情况下,可以使用内置类型存储值,但是必须确保始终在输入点验证值,否则我们最终可能会使用无效值。 解决此问题的一种方法是将值存储为自定义struct,该自定义具有private readonly内置类型的单个后备字段,并且其构造函数会验证提供的值。然后,我们始终可以确保仅通过使用此struct类型来使用经过验证的值。 我们还可以提供与底层内置类型之间的强制转换运算符,以便值可以作为底层类型无缝地进入和退出。 以一个例子为例,其中我们需要表示域对象的名称,并且有效值是长度在1到255个字符(含)之间的任何字符串。我们可以使用以下结构来表示: public struct ValidatedName : IEquatable<ValidatedName> { private readonly string _value; private ValidatedName(string name) { _value = name; } public static bool IsValid(string name) { return !String.IsNullOrEmpty(name) && name.Length <= 255; } public bool Equals(ValidatedName other) { return _value == other._value; } public override bool …