CRL
Новичок
Проектирование интерфейса и реализации
Возник вопрос по по воду правильного проектирования интерфейсов и их реализации.
Имеется интерфейс, описывающий взаимодействие с хранилищем данных безотоносительно его типа:
Имеется реализация данного интерфейса для конкретного типа хранилища - MySQL:
Далее, используется реализация:
Собственно, вопрос вот в чем: по идее, реализация интерфейса - это "черный ящик" с заданным функционалом и, используя реализацию, я могу лишь ориентироваться на описание, сделанное в интерфейсе. Но - в моём случае - из этого описания непонятно, как должны быть представлены входные данные - я не знаю формата $data, когда пользуюсь реализацией интерфейса (если хранилище - текстовый файл, формат $data будет отличаться от случая с хранением данных в SQL-базе). Т.е., если я явно указываю параметры, специфичные для SQL-базы, в интерфейсе, он терят универсальность, если указываю в общем виде - становится неочевидно использование реализации. Как правильно проектировать подобного рода вещи, чтобы они сохраняли универсальность и при этом были очевидны?
Возник вопрос по по воду правильного проектирования интерфейсов и их реализации.
Имеется интерфейс, описывающий взаимодействие с хранилищем данных безотоносительно его типа:
PHP:
interface IStorage
{
public function db_connect($open_data);
...
}
PHP:
class MySQLStorage implements IStorage
{
public function db_connect($open_data)
{
$result = array();
if(
empty($open_data["db_host"]) ||
empty($open_data["db_user"]) ||
empty($open_data["db_pass"]) ||
empty($open_data["db_name"]) ||
empty($open_data["db_charcode"])
)
{
$result["flag"] = false;
$result["msg"] = "Некоректны параметры подключения к хранилищу";
return $result;
}
// устанавливается соединение с БД и возвращается маркер соединения
...
$result["flag"] = true;
$result["msg"] = "Соединение с БД установлено";
$result["storage_marker"] = $storage_marker;
return $result;
}
...
}
PHP:
...
$storage = new MySQLStorage;
$clib = new Lib($storage);
...
$marker = $clib->storage->db_connect($data);
