Итак, у нас есть класс RestSearchCriteria , который можно сериализовать в JSON и использовать для запроса всех наших API.
Допустим, я хочу искать только в активные статьи, поэтому мы должны проверить поля состояния, publish_from и publish_to. Кроме того, параметры критериев предела и смещения должны обрабатываться на основе предоставленного класса PaginationConfig и т. Д. Это довольно много логики, которая используется во многих местах кода.
Где мы должны поместить эту логику? Мы провели некоторое исследование шаблонов Factory и Builder, но не совсем уверены, как их реализовать.
Наше текущее решение выглядит примерно так:
public function findActiveArticles(
RestSearchCriteria $criteria,
PaginationConfig $paginationConfig
): ArticlesResult {
// mutate the criteria object by adding parameters for article state, publish_from, publish_to
// mutate the criteria object by setting limit and skip parameters based on the pagination config
// fetch and return data using criteria
}
Таким образом, код дублируется вво многих местах и критериях объект мутирован, что очень сложно проверить. Мы хотим избавиться от этих методов и заменить их одним методом findArticles ($ criters) и переместить эту логику для подготовки критериев куда-нибудь еще.