За последние 24 часа нас посетили 59070 программистов и 1811 роботов. Сейчас ищут 944 программиста ...

О моделях в MVC фреймворках и способе возврата вычисляемых д

Тема в разделе "Прочие вопросы по PHP", создана пользователем LukiDuki1980, 19 апр 2015.

  1. LukiDuki1980

    LukiDuki1980 Новичок

    С нами с:
    19 апр 2015
    Сообщения:
    10
    Симпатии:
    0
    Вопрос у меня не конкретно к какому-то фреймворку, а в целом, так скажем по теории.

    Многие фреймворки в документациях приводят пример, когда модель возвращает непосредственно объект какой-либо таблицы, но чаще в проектах модели так же производят какие-то вычисления и могут возвращать помимо полей таблиц еще множество данных.

    Раньше, скажем в PHP, это решалось просто, к возвращенному массиву просто добавляли новые значения и возвращали весь список, а как решать эту проблему на уровне текущих абстракций фреймворков? В класс (отражающий таблицу) добавлять дополнительные поля? Или же создать отдельный класс, который включает как вычисляемые данные, так и объект с БД?
     
  2. LukiDuki1980

    LukiDuki1980 Новичок

    С нами с:
    19 апр 2015
    Сообщения:
    10
    Симпатии:
    0
    Версия вопроса 2.0 (с кодом).
    Условие, после обработки из БД формируется результат в виде некого объекта класса Post, в котором описаны поля таблиц (ORM иди ActiveRecord не важно).
    Вопрос.
    Как с точки зрения ООП дизайна поступить, то есть что вернуть контроллеру?


    1) Просто вернуть массив, где одно значение это объект Post (результат из БД), а второй вычисленные данные.
    Код (PHP):
    1. class Model {
    2.  
    3. public function getData(){
    4.   $query = "Query";
    5.   $post = $store->get($query);
    6.   $result = [
    7.     'post' => $post,
    8.     'smthParams' => $this->calculateSmth()
    9.   ];
    10.   
    11.   return $result;
    12. }
    13. ...
    14. } 
    2) Создать какой-то выше по уровню класс типа OverPost, которые бы включал в себя объект (результат из БД), и вычисленные данные (по сути тот же массив только в обертке ООП со всеми плюшками).
    Код (PHP):
    1. class Model {
    2.  
    3. public function getData(){
    4.   $query = "Query";
    5.   $post = $store->get($query);
    6.   $result = new OverPost()
    7.   $result->setPostData($post);
    8.   $result->setSmthParam($this->calculateSmth())
    9.   
    10.   return $result;
    11. }
    12. ...
    13. } 

    3) Заранее расширить класс Post, чтобы он содержал данные не только с таблиц БД, а так же вычисляемые данные.

    Код (PHP):
    1. class Model {
    2.  
    3. public function getData(){
    4.   $query = "Query";
    5.   $post = $store->get($query);
    6.   $post->setSmthParam($this->calculateSmth());
    7.   return $post;
    8. }
    9. ...
    10. } 
    В общем какой вариант будет правильней, с точки зрения дизайна кода, с точки зрения MVC и с точки зрения нынешнего стиля фреймворков?
     
  3. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Re: О моделях в MVC фреймворках и способе возврата вычисляем

    Надо конечно смотреть конкретно по конкретному фреймворку и конкретно по паттерну по которому проектировались модели.
    В частности, ORM при подходе ActiveRecord в конечные классы моделей включают методы beforeSave() или beforeUpdate и проч., которые в частности и могут быть использованы для дополнительной логической обработки данных на уровне модели.