Шаблон проектирования для предоставления данных с настраиваемыми параметрами

Я пытаюсь разработать структуру, которая позволяет различным работникам запрашивать значения из центрального источника данных с произвольными параметрами. Учтите следующее:

Рабочий запрашивает текущее значение скользящего среднего, рассчитанное по предыдущим 7 периодам времени. Он делает это, передавая в некоторый центральный источник данных или поставщику следующие данные:

{ 
  Name: 'MovingAverage',
  Parameters: {
    Periods: 7,
    RemoveBias: true,
  }
}

В центральном источнике / провайдере данных каким-либо образом зарегистрирован MovingAverage, а также допустимый диапазон параметров, которые можно использовать при вычислении скользящего среднего. Исходя из того, что было передано, источник данных вычисляет скользящее среднее с указанными параметрами и передает результат обратно исполнителю.

Теоретически это кажется довольно простым, но мне трудно понять, как спроектировать что-то подобное.

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

Я не знаю, как опытный разработчик назвал бы что-то подобное, поэтому я застрял в плане планирования своих действий.

Повышение качества Laravel с помощью принципов SOLID: Лучшие практики и примеры
Повышение качества Laravel с помощью принципов SOLID: Лучшие практики и примеры
Когда мы говорим о том, как сделать следующий шаг в качестве разработчика, мы должны понимать, что качество кода всегда является основным фокусом на...
Принципы SOLID - лучшие практики
Принципы SOLID - лучшие практики
SOLID - это аббревиатура, обозначающая пять ключевых принципов проектирования: принцип единой ответственности, принцип "открыто-закрыто", принцип...
1
0
37
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Хороший способ реализовать это - использовать шаблон проектирования команд, где вы определяете новый класс (команду) для каждого типа выборки.

В этом случае у вас будет класс MovingAverageCommand со свойствами Periods и RemoveBias.

Теперь то, как вы применяете команду, зависит от многих факторов, но стандартный способ сделать это - определить метод выполнения, который будет получать экземпляр вашего источника данных.

public class MovingAverageCommand : IDataSourceCommand {
    int _periods
    bool _removeBias

    [...]

    public Response Execute(IDataSource dataSource) {
        [...]
    }
}

Моя точка зрения на ваш случай:

  1. Нужен способ разобрать запрос.

  2. Нужен слой / услуга / класс с любым именем над центральным источником данных.

Для первого пункта, как сказал @ Phil-R, вы можете использовать шаблон команды.

а для второго пункта вы можете использовать шаблон репозитория.

Другие вопросы по теме