У меня есть класс обслуживания, который содержит ряд объектов, которые содержат различные виды данных и их соответствующее поведение.Один из этих объектов имеет другие объекты, которые используют некоторые данные первых двух объектов ... попробуйте сказать, что это в 10 раз быстрее!
Так что в приведенном ниже примере object3 принимает аргументы x и y из object1 и параметраz из объекта2.В свою очередь, эти параметры не «используются» object3, но передаются в качестве аргументов в object3_1 и object3_2.
class ServiceClass {
protected $object1;
protected $object2;
protected $object3;
public function doSomething (){
$this->object3->calculateSomething($x, $y, $z);
}
}
class Object1Class {
protected $data = {"x"=>"y"};
public function getX (){
//return x
}
public function getY (){
//return y
}
}
class Object2Class {
protected $data = "I'm data!";
public function getData (){
//return string
}
}
class Object3Class {
protected $object3_1;
protected $object3_2;
public function calculateSomething ($x, $y, $z){
$this->object3_1->getSomething($x, $y);
$this->object3_2->getSomethingElse($x, $y, $z);
}
}
Так что в основном я пытаюсь найти лучший способ получения информации изservice, to object3_1 / 3_2?
4 способа, которые я до сих пор получил:
Передача данных из объектов в метод object3, а затем передача в object3_1 /3_2
$this->object3->calculateSomething($this->object1->getX(), $this->object1->getY(), $this->object2->getZ());
Передать объект1 и объект2 в объект3, а затем либо передать данные в объект3_1 / 3_2, либо передать объекты снова
$this->object3->calculateSomething($this->object1, $this->object2);
Создайте новый класс, содержащий свойства и поведение для требуемых данных, и передайте его.
class DataClass {
protected $xy;
protected $z;
public function __contruct($xy, $z){
$this->xy = $xy;
$this->z = $z;
}
public function getX(){
// return x
};
public function getY(){
// return y
};
public function getZ(){
// return z
};
}
$this->object3->calculateSomething($DataObject);
Создайте массив элементов данных и передайте его.
Все опции работают, просто не получается передать один и тот же аргумент через несколько методов.В надуманном примере, приведенном выше, я сделал только 2 класса глубиной ради краткости, но в некоторых областях моего проекта данные должны быть переданы до 6 уровней глубиной, прежде чем они будут использованы.
СВ варианте 1 список параметров имеет реальную вероятность увеличения числа - не то, что в конечном методе вычислений делается слишком много вещей, а просто требуется все эти биты данных для одного вычисления.Вариант 3 кажется мне привлекательным, но он продублирует код поведения из исходных объектов - так что прохождение самих объектов кажется лучше ... и это круг, в который я вхожу последние несколько дней.
Есть ли лучший способ сделать это, или я просто слишком много думаю?