我有可以安装在一个或多个系统(服务器/台式机/硬件)上的软件产品。每个产品都有有关如何定义keyCode(规范)的逻辑。几乎没有什么变化的许多软件产品,其逻辑可能是相同的。
产品->由产品代码定义->所需的唯一密钥代码进行安装
我需要针对该产品的键码验证来验证用户输入的键。
对于这种过程,什么是好的软件模式?
我到目前为止所做的是
{
readonly arrayofproductCodes;
public CanProcess(string productCode)
{
return arrayofproductCodes.contains(productCode);
}
public validate(string keyCode)
{
return validation result;
}
}
可能有数百种软件产品,每隔一个月添加一次。
我觉得应该有一些创建模式来基于ProductsCode创建实例化验证逻辑。
让我知道我的问题是否清楚。
问候,
三月
您可以做的是创建一个接口:
public interface IProductValidator
{
bool CanProcess(string productCode);
void Validate(string keyCode);
}
然后为您要验证的每个产品实现此接口:
public class XYZProductValidator : IProductValidator
{
public bool CanProcess(string productCode)
{
return productCode == "XYZ";
}
public void Validate(string keyCode)
{
//validation logic
}
}
如果您使用的是依赖注入,则将其注册为单例。如果您不使用DI,则需要一些工厂类来负责创建每个类。
在调用代码中,如果您使用的是DI,则可以插入IEnumerable<IProductValidator> productValidators
。
public class Calling
{
private readonly IEnumerable<IProductValidator> _productValidators;
public Calling(IEnumerable<IProductValidator> productValidators)
{
_productValidators = productValidators;
}
public void Validate(string productCode, string keyCode)
{
//find the right validator based on productCode
var validator = _productValidators.Where(v => v.CanProcess(productCode));
validator.Validate(keyCode);
}
}
将来,当您添加更多产品时,通过这种方式,您所要做的就是实现IProductValidator
接口,并且所有调用代码都将正常工作。现在,如果您担心循环遍历并IEnumerable
查找正确的IProductValidator
,则可以拥有另一个类,例如ProductValidatorProvider
,IEnumerable<IProductValidator>
在其中注入in,将其转换为a Dictionary<string, IProductValidator>
,然后使用它来查找正确的IProductValidator。
P-我喜欢依赖注入的想法。
我使用依赖注入和Autofac实现了