Вопрос, в целом, не касается именно PHP, но нашёл эту тему самой подходящей.
Имеется достаточно простая задача, в кратце опишу ситуацию:
1. Имеется база данных клиентов (отдельная таблица с id клиента, описанием компании, названием, логотипом и пр. сопутствующими деталями).
2. За каждым клиентом закрепляются оказанные на данный момент услуги( тоже отдельная таблица, основная информация берётся именно из неё, примерная структура такова - имеются указатели, закрепляющие за каждой услугой принадлежность клиенту, определённому тарифному плану и команде, участвовавшей в разработке, соответственно ключи с_id, t_id, crew_id). Также в таблице содержатся данные касательно каждой услуги - описание, дата, команда участвовавшая в разработке, скриншоты и пр.).
3. Имеются таблицы для тарифов и команды, наименованию услуг здесь, я думаю, всё ясно.
Задача, всю эту информацию, соответственно выводить, всё легко решается посредством CI, Joomla и любой другой системы, мне же, хотелось бы как-то улучшить архитектуру и, конечно же, научиться чему-то ещё.
Возникла идея применения ООП, где главной сущностью будет Клиент, у которого будут содержаться методы для добавления-вывода-удаления услуг, оказанных этому клиенту(это будет соответствующий объект), получения услуг, касательно определённого тарифа, команды, учавствовашей в этом, для каждой отдельной сущности, для удобства( как мне кажется) необходимо использовать отдельные объекты.
Здесь приведу немного кода:
- Код: Выделить всё
class Client{
function __construct(){}
//Здесь будут идти все необходимые свойства:
protected $keys; //etc
//Здесь будут хранится объекты услуг, методы получения будут схожими с получением ключей у объекта Клиент
// Класс услуг будет расширять абстрактный класс, чтобы быть уверенным в наличие методов получения-установки значений для свойств объекта Услуги
protected $services;
//Метод для получения свойств:
public function get($key){
if(isset($this->keys[$key]){
return $this->keys[$key];
}
else return null;
}
//Метод для добавления($key, $value)
public function set($key, $value){
$this->keys[$key] = $value;
}
}
Сам механизм работы я рассматриваю так:
// В конструкторе вызывается функция делающая 1!! запрос, получая данные из всех выше перечисленных таблиц, заатем различные методы конструкторы формируют из полученного массива классы сущностей.
$client = new Client($id)// Где id - это ун. номер клиента, получаемый через get
$services = $client->getService('t_id', 'some_value') // Получим список услуг данного клиента, касательно необходимого тарифа
//Дальше уже можно манипулировать с массивом объектов Услуг через обычный массив или через специальный класс посредника
Вопрос заключается в следующем, что более рационально использовать - такой метод или просто создавать методы getById, где получить клиентов и пр. Если нужно получить услуги конкретного клиента, под определённый тариф где был определённый участник и пр. и пр. Думаю, понятно. Для каждого действия создавать свой запрос, естественно они будут идти не одновременно, но..это всё как-то некрасиво, тем более что такие же результаты можно получить сортировкой и перебором массивов с данными, здесь лишь одна сложность - с разрастанием данных операции будут усложняться, всё таки это не БД.
Подскажите, где компромисс и оптимальное решение?
