169 похожих чатов

Есть такая задачка: что-то думаю как сделать, и никак не

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

1 ответов

18 просмотров

Т.е. у тебя цепочка обработки данных?

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Ребят в СИ можно реализовать ООП?
Николай
33
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Карта сайта