CRL
Новичок
Паттерн Factory и типизация результата
В ходе осмысления работы Фабрики возник вопрос по типизации результата. Например, в прототипе (интерфейсе) описан метод query($data). Данный метод принимает запрос к стораджу и возвращает результат. Результат возвращается в специфичной для реализации форме: например, для SQL-запроса это ресурс, для запроса к текстовому файлу - это строка. Фабрика создает объект нужной реализации, который потом используется в программе; в ходе использования этого объекта я вызываю метод $obj->query($current_data) и получаю... что? То есть понятно, что я получаю некий сет-результат, но для того, чтобы понять, что именно это за сет, придется провести его анализ уже в приложении, чего делать не хотелось бы. Иыми словами, как и где должен описываться результат работы методов реализаций, чтобы с ним можно было работать, не выполняя проверки типа в самом приложении? Вопрос касается не столько моей ситуации со стороджами, сколько такой проблемы в целом - важно понять принцип.
Так же не совсем ясно по поводу описания интерфейса. При описании в интерфейсе методов, я не могу их специфицировать без параметров, так как реализация может требовать передачи методам параметров, поэтому приходится описывать их формально:
или
И в случае типизированного, и в случае нетипизированного описания параметров, они всё равно остаются формальными, т.е., в реализации я должен передавать в экземпляр реализации некую структуру, а уже сама реализация эту структруру распарсивает. Что-то типа такого:
или, если формальный параметр типизирован:
Вот именно эта парсировка структуры смущает. Нужно бы, наверное, передавать в экземпляр реализации уже конечные параметры, а не структуру, их содержащую, но как тогда согласовать это с интерфейсом?
В ходе осмысления работы Фабрики возник вопрос по типизации результата. Например, в прототипе (интерфейсе) описан метод query($data). Данный метод принимает запрос к стораджу и возвращает результат. Результат возвращается в специфичной для реализации форме: например, для SQL-запроса это ресурс, для запроса к текстовому файлу - это строка. Фабрика создает объект нужной реализации, который потом используется в программе; в ходе использования этого объекта я вызываю метод $obj->query($current_data) и получаю... что? То есть понятно, что я получаю некий сет-результат, но для того, чтобы понять, что именно это за сет, придется провести его анализ уже в приложении, чего делать не хотелось бы. Иыми словами, как и где должен описываться результат работы методов реализаций, чтобы с ним можно было работать, не выполняя проверки типа в самом приложении? Вопрос касается не столько моей ситуации со стороджами, сколько такой проблемы в целом - важно понять принцип.
Так же не совсем ясно по поводу описания интерфейса. При описании в интерфейсе методов, я не могу их специфицировать без параметров, так как реализация может требовать передачи методам параметров, поэтому приходится описывать их формально:
PHP:
interface IStorage
{
public function query($data);
...
}
PHP:
interface IStorage
{
public function query(DataSet $data);
...
}
PHP:
$data = array();
$data["dbhost"] = "localhost";
...
$current_storage = new StorageFactory($data);
PHP:
$data = new DataSet;
$data->host = "localhost";
...
$current_storage = new StorageFactory($data);