Я пытаюсь разработать структуру, которая позволяет различным работникам запрашивать значения из центрального источника данных с произвольными параметрами. Учтите следующее:
Рабочий запрашивает текущее значение скользящего среднего, рассчитанное по предыдущим 7 периодам времени. Он делает это, передавая в некоторый центральный источник данных или поставщику следующие данные:
{
Name: 'MovingAverage',
Parameters: {
Periods: 7,
RemoveBias: true,
}
}
В центральном источнике / провайдере данных каким-либо образом зарегистрирован MovingAverage
, а также допустимый диапазон параметров, которые можно использовать при вычислении скользящего среднего. Исходя из того, что было передано, источник данных вычисляет скользящее среднее с указанными параметрами и передает результат обратно исполнителю.
Теоретически это кажется довольно простым, но мне трудно понять, как спроектировать что-то подобное.
Мне интересно, существуют ли какие-либо установленные шаблоны проектирования или примеры с открытым исходным кодом, которые реализуют что-то подобное, чтобы я мог их изучить и внедрить в свой проект.
Я не знаю, как опытный разработчик назвал бы что-то подобное, поэтому я застрял в плане планирования своих действий.
Хороший способ реализовать это - использовать шаблон проектирования команд, где вы определяете новый класс (команду) для каждого типа выборки.
В этом случае у вас будет класс MovingAverageCommand со свойствами Periods и RemoveBias.
Теперь то, как вы применяете команду, зависит от многих факторов, но стандартный способ сделать это - определить метод выполнения, который будет получать экземпляр вашего источника данных.
public class MovingAverageCommand : IDataSourceCommand {
int _periods
bool _removeBias
[...]
public Response Execute(IDataSource dataSource) {
[...]
}
}
Моя точка зрения на ваш случай:
Нужен способ разобрать запрос.
Нужен слой / услуга / класс с любым именем над центральным источником данных.
Для первого пункта, как сказал @ Phil-R, вы можете использовать шаблон команды.
а для второго пункта вы можете использовать шаблон репозитория.