这是一个问题,我不确定如何称呼它或如何命名我想做的事情,但希望代码示例能够说明一切。我有 PHP 背景,正在学习 .NET Core 2.2/3.0。我现在遇到的问题是如何在创建类似的类时避免一些代码重复。例如,我想创建基本上只包含字符串的多个值对象,但每个值对象都有不同的约束。然而,在大多数情况下,唯一的限制差异在于长度。
所以在 PHP 中我会做这样的事情:
abstract class Text
{
abstract public static function maxCharacters(): int;
protected $value;
public function __construct(string $text)
{
if (mb_strlen($text) > static::maxCharacters()) {
throw new LengthException(sprintf('Too many characters, the max is %d.', static::maxCharacters()));
}
$this->value = $text;
}
public function value(): string
{
return $this->value;
}
}
class Name extends Text
{
public static function maxCharacters(): int
{
return 50;
}
}
class Description extends Text
{
public static function maxCharacters(): int
{
return 1000;
}
}
这不是继承的最佳示例,但目标是说明这一点,即我希望有 1 个地方可以放置验证逻辑,然后在子类中只需定义验证的参数,而不是定义验证的参数。执行验证的实际逻辑。
但正如您所看到的,如果没有继承,就会进行大量的复制/粘贴,而复制/粘贴是我更愿意避免的事情。我能想到的唯一选择是创建一个单独的TextValidator
类或我可以从中调用的东西set
,我只需要传递最大数量的字符,但这仍然会给我留下比我更多的复制/粘贴更喜欢。
您如何在 C# 中以尽可能少的复制/粘贴来编写这样的内容?
烙印99
相关分类