Вопрос по книге Web Application Development with Yii 2 and PHP

Обсуждение документации второй версии фреймворка. Переводы Cookbook и авторские рецепты.
Ответить
Andrewkha
Сообщения: 132
Зарегистрирован: 2014.11.08, 21:27

Вопрос по книге Web Application Development with Yii 2 and PHP

Сообщение Andrewkha »

Коллеги, добрый день!

Начал читать данную книгу, непонятен смысл одного финта, который там используется. Постараюсь описать подробно, для тех, кто книгу не читал, но фишку сечет.

Итак, рассматривается пример CRM, в БД приложения (на данный момент) 2 таблицы - customers & phones. Для добавления новой записи в БД автор использует не Active Record напрямую, а т.н. translation layer. Как это выглядит. Для каждой таблицы существует 2 модели - Active Record и Domain model. Вторая состоит лишь в объявлении публичных свойств и описании конструктора, который задает значения этих публичных свойств.

Далее в контроллере объявляются 2 метода:
  • store - который принимает объект типа domain model, создает объекты Active Record и записывает в таблицы
  • makeCustomer - который принимает объекты Active Record и "конвертирует" их в объект domain model
Соответственно, как происходит процесс получения данных из формы и последующая запись в БД. Из формы получаем объекты типа active record и далее идет такая конструкция:

Код: Выделить всё

$this->store($this->makeCustomer($customer, $phone));
Т.е., если я все правильно понял, получаем на вход объекты Active Record, конвертируем их в объект domain model (makeCustomer($customer, $phone)), а затем опять обратно в Active Record.

Собственно вопрос - к чему все эти финты ушами? Сорри, если написано не слишком понятно, на всякий случай привожу код

Код: Выделить всё

    public function actionAdd() {

        $customer = new CustomerRecord();
        $phone = new PhoneRecord();

        if($this->load($customer, $phone, $_POST)) {
            $this->store($this->makeCustomer($customer, $phone));
            return $this->redirect('/customers');
        }

        return $this->render('add', compact('customer', 'phone'));
    }

    private function store(Customer $customer) {

        $customer_record = new CustomerRecord();
        $customer_record->name = $customer->name;
        $customer_record->birth_date = $customer->birth_date->format('Y-m-d');
        $customer_record->notes = $customer->notes;

        $customer_record->save();

        foreach($customer->phones as $phone) {
            $phone_record = new PhoneRecord();
            $phone_record->number = $phone->number;
            $phone_record->customer_id = $customer_record->id;
            $phone_record->save();
        }
    }

    private function makeCustomer(
        CustomerRecord $customer_record,
        PhoneRecord $phone_record
    ) {
        $name = $customer_record->name;
        $birth_date = new \DateTime($customer_record->birth_date);

        $customer = new Customer($name, $birth_date);
        $customer->notes = $customer_record->notes;

        $customer->phones = new Phone($phone_record->number);

        return $customer;
   }
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Вопрос по книге Web Application Development with Yii 2 and PHP

Сообщение zelenin »

просто дополнительные методы введены для инкапсулирования обработки связанных ar-моделей
Andrewkha
Сообщения: 132
Зарегистрирован: 2014.11.08, 21:27

Re: Вопрос по книге Web Application Development with Yii 2 and PHP

Сообщение Andrewkha »

А попроще? Для чайников?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Вопрос по книге Web Application Development with Yii 2 and PHP

Сообщение samdark »

Чтобы отвязаться от AR, если что...
Andrewkha
Сообщения: 132
Зарегистрирован: 2014.11.08, 21:27

Re: Вопрос по книге Web Application Development with Yii 2 and PHP

Сообщение Andrewkha »

Но я правильно понял, что в данном случае мы этими двумя преобразованиями ничего не меняем? Мы берем AR, преобразуем его в domain model, затем опять в AR. Т.е. по сути ничыего не изменилось?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Вопрос по книге Web Application Development with Yii 2 and PHP

Сообщение samdark »

Да, просто ещё один слой абстракции.
Andrewkha
Сообщения: 132
Зарегистрирован: 2014.11.08, 21:27

Re: Вопрос по книге Web Application Development with Yii 2 and PHP

Сообщение Andrewkha »

ок, спасибо!
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Вопрос по книге Web Application Development with Yii 2 and PHP

Сообщение zelenin »

Andrewkha писал(а):Но я правильно понял, что в данном случае мы этими двумя преобразованиями ничего не меняем? Мы берем AR, преобразуем его в domain model, затем опять в AR. Т.е. по сути ничыего не изменилось?
да там нет никаких преобразований. просто вынесли логически связанный функционал в функцию.
Andrewkha
Сообщения: 132
Зарегистрирован: 2014.11.08, 21:27

Re: Вопрос по книге Web Application Development with Yii 2 and PHP

Сообщение Andrewkha »

Ну как нет? Почему бы не отправить в DB данные, полученные из формы?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Вопрос по книге Web Application Development with Yii 2 and PHP

Сообщение zelenin »

Andrewkha писал(а):Ну как нет? Почему бы не отправить в DB данные, полученные из формы?
так они и сохраняются в БД. причем через АР
Andrewkha
Сообщения: 132
Зарегистрирован: 2014.11.08, 21:27

Re: Вопрос по книге Web Application Development with Yii 2 and PHP

Сообщение Andrewkha »

Да, но перед этим они переводятся из AR в объект класса, который не является наследником AR, а затем обратно в AR.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Вопрос по книге Web Application Development with Yii 2 and PHP

Сообщение zelenin »

Andrewkha писал(а):Да, но перед этим они переводятся из AR в объект класса, который не является наследником AR, а затем обратно в AR.
а, вижу. ну собственно как в книге написано, делается это для дополнительной абстракции - метод хранения в базе можно поменять, а модель Customer останется неизменной.
Имхо излишне.
Вообще я прочел всю книгу в момент выхода - там много вещей, отличающихся от обычных yii-практик. И не то чтобы улучшающие, а просто другой подход. Видно, что автор либо чересчур олдскульный либо использует подходы какого-то другого фреймворка.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Вопрос по книге Web Application Development with Yii 2 and PHP

Сообщение samdark »

Не олдскульный, а адепт подходов, описанных у классиков программирования. В принципе, знать эти подходы не плохо. Хотя бы чтобы понимать, где стоит их применять, а где можно попроще. В этом плане книга занятна.
Andrewkha
Сообщения: 132
Зарегистрирован: 2014.11.08, 21:27

Re: Вопрос по книге Web Application Development with Yii 2 and PHP

Сообщение Andrewkha »

А вот что бы такое почитать/посмотреть новичку, который совсем недавно занялся программированием в принципе в качестве хобби? Опыта почти никакого - базовые знания основ php и пара проектов на CI, которые делались в процессе изучения этого самого CI, т.е. не реально работающие, а 100% учебные...

Хочу изучить сам Yii2, на первое время без таких вот хитрых заморочек. С английским проблем нет. Начал читать guide, но там для более продвинутых все-таки...
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Вопрос по книге Web Application Development with Yii 2 and PHP

Сообщение zelenin »

Andrewkha писал(а):А вот что бы такое почитать/посмотреть новичку, который совсем недавно занялся программированием в принципе в качестве хобби? Опыта почти никакого - базовые знания основ php и пара проектов на CI, которые делались в процессе изучения этого самого CI, т.е. не реально работающие, а 100% учебные...

Хочу изучить сам Yii2, на первое время без таких вот хитрых заморочек. С английским проблем нет. Начал читать guide, но там для более продвинутых все-таки...
не-не, книга самое-то для новичка. Все разжевано.
Andrewkha
Сообщения: 132
Зарегистрирован: 2014.11.08, 21:27

Re: Вопрос по книге Web Application Development with Yii 2 and PHP

Сообщение Andrewkha »

тогда продолжаем процесс :)) спасибо!
Andrewkha
Сообщения: 132
Зарегистрирован: 2014.11.08, 21:27

Re: Вопрос по книге Web Application Development with Yii 2 and PHP

Сообщение Andrewkha »

Отлично, спасибо!
Ответить