Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

2-й вопрос к толковым web-разработичкам, приятелем с паттернами

Anna | 31.05.2014 | нет комментариев

После предыдущего вопроса появились новые. 2 суток обдумывал, всё что вы мне ответили, огромное каждому спасибо. Сказать, что всё прояснилось — не могу. Следственно на определенном примере умоляю показать вектор, по которому двигаться дальше. Да, я разглядывал yii и symfony, и даже маленький навык работы с ними есть. Но. У меня не стоит задачи возвести фреймворк, все что мне нужно — достичь читаемого кода, добиться автономности от хранения данных и не строить запросы в контроллере.

Умоляю вникнуть в то, что опишу ниже.

Скажем, есть класс-контроллер userController. У него определены следующие способы-экшены:

search — вызывается по умолчанию;
view — карточка абонента;
create — добавление абонента в биллинг;
remove — удаление абонента;
и т.д. (порядка 10 экшенов, речь не о них).

Есть класс-модель user, реализующий интерфейс ArrayAccess (писал в прошлом вопросе, но повторюсь — для доступа к объекту Абонент как к массиву).
В этом классе определены способы:
__construct(), принимающий массив, в котором передается либо id, либо login абонента. И то, и другое уникально, но изредка нужно получить абонента по логину (при платежах). Мне теснее подсказали, что дозволено реализовать не так, как делал я:

$user = new user(array(
‘id’=>$id
));

а

$user=user->find_by(‘id’, $id);

Такой подход мне по душе. Но. Анализируя по цепочке последующий рефакторинг, натыкаюсь на некое недопонимание. Связано оно вот с чем. Пытаясь разгрузить контроллер, я нагружаю модель. И если первоначально модель была каждого лишь изложением объекта, то теперь там происходит валидация, запись в лог, статические способы для обработки таблиц БД, хранящих эти объекты. Как бы бы это не нехорошо. Итогом этого подхода стало то, что я получил много моделей, с исходных 5-6 их стало несколько десятков. И хоть их стало огромнее, код упростился и я не задумываюсь о проверках перед обновлением какой-то сущности в различных частях системы — модель сама проверяет (правда пока не всюду, но речь не о том), и это здорово. Теперь я понимаю, что необходимо разгрузить модель, отделив само приобретение данных из Хранилища (не значимо, будь то БД, либо файл конфигурации). Своими комментариями вы меня подтолкнули к мапперу. Вчитываюсь, но нет окончательного понимания, в какой момент он вступает в работу и он ли создает объект либо нет. Т.е. если я хочу получить объект user, модель ли (в моем случае) создает себя сама, либо же маппер принимает параметры, получает запись из Хранилища и возвращает объект класса user? Либо же в модели user происходит обработка входящих условий и на их основе делается запрос в маппер, тот, что возвращает итог и на основе этого результата модель создает объект? Гляжу на примеры в интернете, но не допонимаю как это применить в моем случае.

И дальнейший момент. Как я теснее писал выше, в контроллере userController есть экшн search. Касательно его работы есть вопросы.
Теперь поиск абонентов в этом экшене происходит так:

$params=array();

$tariff=get_param(‘tariff’, ‘int’, 0);
if ($tariff>0) $params[]=“tariff=$tariff”;

$cities=get_param(‘city’, ‘int_array’, array());
if (!empty($cities)) $params[]=”city IN (”.implode(‘, ’, $cities).”)”;

$users=user::search($params);

Вот тут вызывается как раз-таки статический способ модели, тот, что и ищет абонентов, соответствующих указанным параметрам. Как видите, даже не в модели, а в контроллере формирую часть sql-запроса. Но по каждой видимости, даже и модель этого видеть не должна, передавая каким-то образом разношерстные данные в маппер.

Спасибо, что дочитали данный поток сознания )) Дюже ожидаю ваших результатов.

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB