Шаблон проектирования для предоставления данных с пользовательскими параметрами - PullRequest
0 голосов
/ 09 сентября 2018

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

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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

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

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

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

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

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

0 голосов
/ 09 сентября 2018

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

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

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

public class MovingAverageCommand : IDataSourceCommand {
    int _periods
    bool _removeBias

    [...]

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