我想知道,创建标记虚拟类(内部没有成员)是否仅用于通用签名是一个好主意。
例如,考虑下面的接口签名:
public interface IBusinessValidatorFor<TContext, TEntity>
where TContext : IContext
{
IList<ValidationStatus> Validate (TEntity entityToValidate);
}
实现上述接口的示例具体类可以是:
public sealed class BusinessValidatorFor<CreationContext, Customer>
: IBusinessValidatorFor<CreationContext, Customer>
{
public IList<ValidationStatus> Validate (Customer customerToValidate)
{
// Creation of customer related business validation code here.
}
}
在上面的具体类定义中,CreationContext类(它实现了标记接口IContext)是一个没有属性的虚拟类,但仅用于将其与同一 Customer 类的其他验证器区分开来,但用于不同的其他上下文。
这种方法是个好主意吗?有没有比使用虚拟无成员空类更好的设计替代方案?
上述设计的目的是允许为同一个实体创建多个验证器具体类,但针对不同的上下文,并将其与依赖注入容器一起使用。
以下代码显示了此类验证器在各种上下文中的用法:
public sealed class CustomerController
: Controller
{
private readonly IBusinessValidatorFor<CreationContext, Customer>
custCreateValidator;
private readonly IBusinessValidatorFor<ModificationContext, Customer>
custModifyValidator;
public CustomerController
(
IBusinessValidatorFor<CreationContext, Customer> custCreateValidator,
IBusinessValidatorFor<ModificationContext, Customer> custModifyValidator,
)
{
this.custCreateValidator = custCreateValidator;
this.custModifyValidator= custModifyValidator;
}
public ActionResult Create (Customer customerToCreate)
{
var results = this.custCreateValidator.Validate (customerToCreate);
...
}
public ActionResult Modify (Customer customerToModify)
{
var results = this.custModifyValidator.Validate (customerToModify);
...
}
}
非常感谢您的时间和帮助!