Как мне обращаться с переменными, которые не обязательно являются свойствами класса, но используются несколькими методами? - PullRequest
0 голосов
/ 22 декабря 2011

Иногда я сталкиваюсь с несколькими методами в классе, которые требуют одинаковых данных (например, объект запроса).Как правило, существует один открытый метод с общим именем, таким как parseReport(), который, в свою очередь, делегирует обработку нескольким частным методам и, наконец, возвращает готовый продукт:

public function parseReport( queryObject ) {
    queryObject = correctDatesAndTimes( queryObject );
    queryObject = sortByCusomter( queryObject );
    queryObject = buildHierarchy( queryObject );

    return queryObject;
}

private function correctDatesAndTimes( queryObject ) {
    // do some stuff

    return queryObject;
}

private function sortByCusomter( queryObject ) {
    // do some stuff

    return queryObject;
}

private function buildHierarchy( queryObject ) {
    // do some stuff

    return queryObject;
}

Так что мой вопрос, должен ли мой queryObject быть свойством класса, на которое будут ссылаться все мои методы, а не передавать его в качестве аргумента методу при каждом его вызове?

Ответы [ 2 ]

2 голосов
/ 22 декабря 2011

В таком случае queryObject не должен быть свойством класса. Если вы посмотрите на это, у вас есть одна большая функция, которая разделена на несколько меньших функций. Если бы это была одна большая функция, вы бы не сделали это свойством класса.

Данные принадлежат свойству класса, когда данные фактически являются частью класса. Помни что определение класса - это инкапсуляция как данных, так и поведения.

1 голос
/ 22 декабря 2011

В вашем примере вам нужно передать объект запроса в качестве параметра, так как он будет изменен внутри закрытой функции.

Кроме того, помещение его в приватное свойство доставит вам головную боль, если вы перейдете в многопоточность.1003 *

...