在Steven van Deursen和Mark Seemann的Manning书籍《依赖注入原理、实践和模式》中定义了一个反模式,即Ambient Context Anti-Pattern(我推荐必读),这个反模式很有趣。它也在这里进行了描述。一般问题是,如果你将某些不稳定的依赖项放在静态类后面,你就将代码库中的多个部分耦合到那个不稳定的依赖项上了。
我的困惑始于对不稳定依赖项的定义。不稳定依赖项的定义之一是该依赖项仍在开发或未开发。所以我的问题是:如果该依赖项是一些明确定义的领域知识,例如一些特定领域的电子邮件验证器,放置在领域层中,并且它仍在进行一些代码更改,那么如果我们将其放在静态类后面并在整个代码库中使用它,是否会被视为反模式?(我们正在谈论洋葱架构,其中领域位于中心,一切都引用领域层) 编辑1 这是一个简化的示例领域类:
我的困惑始于对不稳定依赖项的定义。不稳定依赖项的定义之一是该依赖项仍在开发或未开发。所以我的问题是:如果该依赖项是一些明确定义的领域知识,例如一些特定领域的电子邮件验证器,放置在领域层中,并且它仍在进行一些代码更改,那么如果我们将其放在静态类后面并在整个代码库中使用它,是否会被视为反模式?(我们正在谈论洋葱架构,其中领域位于中心,一切都引用领域层) 编辑1 这是一个简化的示例领域类:
public class EmailValidationService
{
private static readonly Regex _emailValidationRegex = /*some regex*/;
public static EmailValidationStatus IsValid(string email)
{
var isValid = _emailValidationRegex.Match(email).Length > 0; ;
return isValid;
}
}
这个验证器的消费者被放置在多个层级上,例如用户输入验证、文件导入验证等等。以下是两个简化的消费者:
public class RawDataImporter{
private Employee ProcessEmployee(EmployeeRowData data)
{
if (string.IsNullOrEmpty(data.Identifier)) { return new InvalidEmployee(); }
if (EmailValidationService.IsValid(data.Identifier) { return new Employee(data.Identifier); }
}
}
public class EmailAttribute :
ValidationAttribute
{
public override bool IsValid(object value)
{
var status = EmailValidationService.IsValid((string)value);
if (status.IsValid)
{
return true;
}
return false;
}
}