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

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

  1. LukiDuki1980

    LukiDuki1980 New Member

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

    LukiDuki1980 New Member

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

    1) Просто вернуть массив, где одно значение это объект Post (результат из БД), а второй вычисленные данные.
    Код (Text):
    class Model {
    public function getData(){
    $query = "Query";
    $post = $store->get($query);
    $result = [
    'post' => $post,
    'smthParams' => $this->calculateSmth()
    ];

    return $result;
    }
    ...
    }
    2) Создать какой-то выше по уровню класс типа OverPost, которые бы включал в себя объект (результат из БД), и вычисленные данные (по сути тот же массив только в обертке ООП со всеми плюшками).
    Код (Text):
    class Model {
    public function getData(){
    $query = "Query";
    $post = $store->get($query);
    $result = new OverPost()
    $result->setPostData($post);
    $result->setSmthParam($this->calculateSmth())

    return $result;
    }
    ...
    }
    3) Заранее расширить класс Post, чтобы он содержал данные не только с таблиц БД, а так же вычисляемые данные.
    Код (Text):
    class Model {
    public function getData(){
    $query = "Query";
    $post = $store->get($query);
    $post->setSmthParam($this->calculateSmth());
    return $post;
    }
    ...
    }
    В общем какой вариант будет правильней, с точки зрения дизайна кода, с точки зрения MVC и с точки зрения нынешнего стиля фреймворков?
     
  3. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    19
    вообщето модель не очень то должна работать с базой, это дело другого уродня
     
Загрузка...

Поделиться этой страницей