могу додуматься.
Есть множество классов, которые производят некие расчеты. На вход им идут разные входные параметры, на выходе также разные данные. Все эти классы реализуют один интерфейс. метод выглядит так:
/**
* @param array<mixed> $params
*
* @return array<mixed>|int|float|string|null
*/
public function calculate(array $params);
Хочу заменить вход / выход на интерфейсы. С возвращаемым значением все просто - интерфейс возвращаемых данных можно сделать, и любое кол-во реализаций. метод интерфейса калькулятора будет возвращать интерфейс например CalculationResultInterface, каждый конкретный калькулятор возвращает какую-то конкретную реализацию этого интерфейса. А вот со входными данными сложнее... разные классы принимают разные данные. Если создать интерфейс входных данных например CalculationInputInterface, и метод заставить принимать его, то все реализации тоже должны будут принимать этот интерфейс, т.к. сужать тип аргумента нельзя. а надо. как это лучше сделать? пытаюсь придумать фабрику. Класс калькулятора возвращает фабрику, фабрика возвращает данные под конкретный калькулятор. Нужно чтобы в классе был абстрактный метод calculate, который принимал бы в каждом конкретном калькуляторе свой класс входных параметров.
т.е. класс обязан реализовать этот метод, при этом класс должен сам определять, какие данные ему нужны. вот как это сделать?
Т.е. у тебя цепочка обработки данных?
Обсуждают сегодня