Проверка программного обеспечения Logi c Pattern - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть программные продукты, которые можно установить на одну или несколько систем (серверы / настольные ПК / оборудование). У каждого продукта есть логика c о том, как определяется его keyCode (спецификация). Логика c может быть одинаковой для многих Программных продуктов с небольшими изменениями.

Product-> определяется ProductCode -> требуется уникальный код-keyCode для установки

Мне нужно проверить ключ, введенный пользователем против проверки кода ключа для этого продукта.

Что такое хороший шаблон программного обеспечения для такого рода процессов

То, что я до сих пор делал, это

{
    readonly arrayofproductCodes;
    public CanProcess(string productCode)
    {
        return  arrayofproductCodes.contains(productCode);
    }


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

несколько сотен Программных продуктов и новые, добавляемые через месяц.

Я чувствую, что должен быть какой-то шаблон создания для создания логических проверок c на основе ProductsCode.

Дайте мне знать, если моя очередь ясна.

С уважением,

Март

1 Ответ

2 голосов
/ 04 февраля 2020

Что вы можете сделать, это создать интерфейс:

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
     }
}

Если вы используете внедрение зависимостей, go и зарегистрируйте это как синглтон. Если вы не используете 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>, преобразовать его в Dictionary<string, IProductValidator> и затем использовать чтобы найти правильный IProductValidator.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...