MVC: передать модель / данные модели к представлению от контроллера?

Все результаты корректны / Каждый решатель корректен!

  • Каждое решение достигает минимума в, он объективен: 100.
  • Каждое решение сохраняет переменные границы
  • , Каждое решение сохраняет "подобное симплексу" ограничение: sum(x) = 100

Игнорирующие ограничения с плавающей точкой, существует бесконечно много различных оптимальных решений для Вашей проблемы.

Различные решатели включая различные подходы решения могут привести к различным решениям (выбирающий одно из многих решений). Здесь, например:

  • алгоритмы LP как Симплекс (Мякоть)
  • алгоритмы обработки естественного языка как последовательные наименьшие квадраты (scipy)
    • (имейте в виду: существуют также решатели LP в scipy, и более специализированным решателям обычно лучше дают некоторую априорную определенную проблему оптимизации-> LP по сравнению с обработкой естественного языка)
5
задан Kazimierz Jawor 18 October 2018 в 06:09
поделиться

6 ответов

д) Ничего из вышеперечисленного; передать "ViewModel" с оптимизацией для просмотра.

Пример в ASP.NET MVC: -

public ActionResult Details(int id)
{
  Product p = ProductService.GetProductById(id);

  if(p == null) { return RedirectToAction("Index"); }

  ProductViewModel model = new ProductViewModel(p);
  return View(model);
}

и a), и b) "будут делать" при условии d). Никогда c)

Как правило, ViewModel просто инкапсулирует Модель (если ничего сложного не происходит, ваше представление может получить доступ к модели напрямую через ProductViewModel.Product). Однако, если представлению необходимо сделать что-то сложное с моделью, это ответственность ViewModel, а не ответственность контроллера или представления.

Это сохраняет ваши заботы красивыми и разделенными. Ваш Контроллер не заботится, какие именно данные нужны вашему представлению (помимо того факта, что он отображает некоторые детали продукта), или особенно в каком формате вашему представлению нужны эти данные. t зависит от деталей реализации вашей модели. Ваша модель не должна заботиться о том, как она просматривается. Если у вас есть два продукта для рендеринга представлений (например, Create, Edit, Summary, MoreDetails и т. Д.), Эти представления могут иметь разные ViewModels, чтобы предоставлять только те данные, которые нужны каждому конкретному представлению, поэтому ваши представления не зависят друг от друга. Прекрасно :)

Еще кое-что для чтения с разных точек зрения: -

http://www.oughttclusters.com/2007/12/datamodel-and-viewmodel/

http://stephenwalther.com/blog/ архив / 04/2009/13 / asp.net-mvc-tip-50-ndash-create-view-models.aspx

http://www.nikhilk.net/Silverlight-ViewModel-MVC.aspx

Я думаю, что ViewModels - это сугубо .NET вещь, но я не вижу никаких причин, по которым этот шаблон нельзя использовать в PHP.

Надеюсь, это поможет.

не нужно беспокоиться о том, как это будет просматриваться. Если у вас есть два продукта для рендеринга представлений (например, Create, Edit, Summary, MoreDetails и т. Д.), Эти представления могут иметь разные модели представления, чтобы предоставлять только те данные, которые необходимы каждому конкретному представлению, поэтому ваши представления не зависят друг от друга. Прекрасно :)

Еще кое-что для чтения с разных точек зрения: -

http://www.oughttclusters.com/2007/12/datamodel-and-viewmodel/

http://stephenwalther.com/blog/ архив / 04/2009/13 / asp.net-mvc-tip-50-ndash-create-view-models.aspx

http://www.nikhilk.net/Silverlight-ViewModel-MVC.aspx

Я думаю, что ViewModels - это сугубо .NET вещь, но я не вижу вообще причин, почему этот шаблон нельзя использовать в PHP.

Надеюсь, это поможет.

не нужно беспокоиться о том, как это будет просматриваться. Если у вас есть два продукта для рендеринга представлений (например, Create, Edit, Summary, MoreDetails и т. Д.), Эти представления могут иметь разные модели представления, чтобы предоставлять только те данные, которые необходимы каждому конкретному представлению, поэтому ваши представления не зависят друг от друга. Прекрасно :)

Еще кое-что для чтения с разных точек зрения: -

http://www.oughttclusters.com/2007/12/datamodel-and-viewmodel/

http://stephenwalther.com/blog/ архив / 04/2009/13 / asp.net-mvc-tip-50-ndash-create-view-models.aspx

http://www.nikhilk.net/Silverlight-ViewModel-MVC.aspx

Я думаю, что ViewModels - это сугубо .NET вещь, но я не вижу вообще причин, почему этот шаблон нельзя использовать в PHP.

Надеюсь, это поможет.

MoreDetails и т. Д.), Эти представления могут иметь разные модели представления, чтобы предоставлять только те данные, которые необходимы каждому конкретному представлению, поэтому ваши представления не зависят друг от друга. Прекрасно :)

Еще кое-что для чтения с разных точек зрения: -

http://www.oughttclusters.com/2007/12/datamodel-and-viewmodel/

http://stephenwalther.com/blog/ архив / 04/2009/13 / asp.net-mvc-tip-50-ndash-create-view-models.aspx

http://www.nikhilk.net/Silverlight-ViewModel-MVC.aspx

Я думаю, что ViewModels - это сугубо .NET вещь, но я не вижу вообще причин, почему этот шаблон нельзя использовать в PHP.

Надеюсь, это поможет.

MoreDetails и т. Д.), Эти представления могут иметь разные модели представления, чтобы предоставлять только те данные, которые необходимы каждому конкретному представлению, поэтому ваши представления не зависят друг от друга. Прекрасно :)

Еще кое-что для чтения с разных точек зрения: -

http://www.oughttclusters.com/2007/12/datamodel-and-viewmodel/

http://stephenwalther.com/blog/ архив / 04/2009/13 / asp.net-mvc-tip-50-ndash-create-view-models.aspx

http://www.nikhilk.net/Silverlight-ViewModel-MVC.aspx

Я думаю, что ViewModels - это сугубо .NET вещь, но я не вижу вообще причин, почему этот шаблон нельзя использовать в PHP.

Надеюсь, это поможет.

10
ответ дан 18 December 2019 в 09:51
поделиться

эээ б.

я действительно не вижу разницы между a и b, кроме некоторых технических деталей как вы будете передавать данные.

обычно вы передаете карту данных в представление с некоторыми данными из модели

0
ответ дан 18 December 2019 в 09:51
поделиться

В идеале, он должен «передавать данные модели в представление», чтобы представление не нуждалось в какой-либо явной структуре модели и, таким образом, было более удобным для повторного использования и проектированием.

Но на практике «передать модель на вид» работает нормально. В большинстве случаев вам все равно понадобится новое представление, потому что клиенты никогда не делятся любимыми цветами (если вы понимаете, что я имею в виду :-), поэтому повторное использование представлений не оправдывает наличия большого количества утомительного кода, необходимого для копирования данных из модели в

Что вам следует больше беспокоить, так это модульность самого контроллера, поскольку многие веб-сайты имеют общие функции (контроллеры), такие как веб-форумы или список новостей, но не внешний вид (представления)

2
ответ дан 18 December 2019 в 09:51
поделиться

Для меня это e).

Как уже упоминалось здесь, в идеале представление и модель не связаны. Я предпочитаю реализовать это с помощью viewHelper для модели. У этого есть API, который представление может использовать для получения данных. Теперь на представления не влияют изменения в модели, и представлению не нужно «получать» внутренние компоненты модели. Они скрыты viewHelper.

пример:

class Post {
    public function export(ViewHelper $helper) {} // I try to avoid getters when I can
}

class PostViewHelper {
    public function getTitle($parameters) {} // title of current post in the loop
}

class PostView {
    private $helpers = array();
    public function loadTemplate($path) {}
    public function addHelper(ViewHelper $helper, $name) {}
    public function __get($key) {} // if exists $this->helper[$key] etc
}

в шаблоне

<h1><?php $this->post->getTitle(); ?></h1>

Вы можете реализовать это по-другому. Но я хочу сказать, что представление и модель не связаны друг с другом.

1
ответ дан 18 December 2019 в 09:51
поделиться

a) передать модель представлению

В противном случае контроллер управляет представлением, просматривая модель. Это то, что произошло бы в «б) передать данные модели в представление». Вариант b) на самом деле даже не имеет смысла в чистом шаблоне MVC. В конце концов, модель - это данные. Если модель изменена для потребления, представление было применено, независимо от того, хотите ли вы сделать это в контроллере и передать его как функцию контроллера. Что происходит, когда у вас другой взгляд? Контроллер по-другому экранирует свои данные? Вскоре у вас будет два представления для модели, подчиненное представление контроллера и само представление.

1
ответ дан 18 December 2019 в 09:51
поделиться

Я не думаю, что это так сложно. a или b.

Задача контролера - управлять отношениями. Он находит модель и представление и предоставляет представлению все данные модели, необходимые для его работы. Вот и все. MVC не диктует точную форму, которую принимают данные.

(a) Начните с простого. Довольно естественно передавать объекты модели непосредственно в представление. Если у вас есть страница о Foo, просто передайте Foo.

(b) Но иногда - и только время от времени - вы создаете объект значения / DTO для передачи данных в представление (названное выше ViewModel). Сделайте это, если есть несоответствие между представлением и собственной моделью , например, сводные обзоры. Если представление представляет собой сводку по 1 000 000 объектов, вы не хотите передавать представлению объекты модели; вы хотите передать в представление сводку по 1 000 000 объектов.

И точная реализация действительно зависит от языка и инфраструктуры, которые вы используете. Но я думаю, что эти рекомендации - хорошее начало.

1
ответ дан 18 December 2019 в 09:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: