首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >验证逻辑软件模式

验证逻辑软件模式
EN

Stack Overflow用户
提问于 2020-02-03 22:06:56
回答 1查看 54关注 0票数 0

我有可以安装在一个或多个系统(服务器/桌面/硬件)上的软件产品,每个产品都有关于如何定义keyCode的逻辑(规范)。对于许多软件产品来说,这种逻辑可能是相同的,而且几乎没有什么变化。

产品->由ProductCode ->required唯一的keyCode定义用于安装

我需要根据该产品的密钥代码验证用户输入的密钥。

对于这种过程,什么是好的软件模式?

到目前为止,我所做的是

代码语言:javascript
运行
复制
{
    readonly arrayofproductCodes;
    public CanProcess(string productCode)
    {
        return  arrayofproductCodes.contains(productCode);
    }


    public validate(string keyCode)
    {
        return validation result;
    }
}

可能有几个软件产品和新的增加每隔一个月。

我觉得应该有一些创建模式来创建基于ProductsCode的实例化验证逻辑。

如果我的遗赠是清楚的请告诉我。

致以敬意,

3月

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-03 22:45:53

您可以做的是创建一个接口:

代码语言:javascript
运行
复制
public interface IProductValidator
{
    bool CanProcess(string productCode);
    void Validate(string keyCode);
}

然后,为您要验证的每个产品实现此接口:

代码语言:javascript
运行
复制
public class XYZProductValidator : IProductValidator
{
     public bool CanProcess(string productCode)
     {
         return productCode == "XYZ";
     }

     public void Validate(string keyCode)
     {
         //validation logic
     }
}

如果使用依赖项注入,请将其注册为单例。如果您不使用DI,那么您需要一些工厂类来负责创建每个类。

在调用代码中,如果使用DI,则可以注入IEnumerable<IProductValidator> productValidators

代码语言:javascript
运行
复制
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>,将其转换为Dictionary<string, IProductValidator>,然后使用它找到正确的IProductValidator。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60047839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档