Где я должен поместить общую логику для создания объекта? - PullRequest
1 голос
/ 13 октября 2019

Итак, у нас есть класс 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) и переместить эту логику для подготовки критериев куда-нибудь еще.

...