Все результаты корректны / Каждый решатель корректен!
100
. sum(x) = 100
Игнорирующие ограничения с плавающей точкой, существует бесконечно много различных оптимальных решений для Вашей проблемы.
Различные решатели включая различные подходы решения могут привести к различным решениям (выбирающий одно из многих решений). Здесь, например:
д) Ничего из вышеперечисленного; передать "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://www.nikhilk.net/Silverlight-ViewModel-MVC.aspx
Я думаю, что ViewModels - это сугубо .NET вещь, но я не вижу никаких причин, по которым этот шаблон нельзя использовать в PHP.
Надеюсь, это поможет.
не нужно беспокоиться о том, как это будет просматриваться. Если у вас есть два продукта для рендеринга представлений (например, Create, Edit, Summary, MoreDetails и т. Д.), Эти представления могут иметь разные модели представления, чтобы предоставлять только те данные, которые необходимы каждому конкретному представлению, поэтому ваши представления не зависят друг от друга. Прекрасно :)Еще кое-что для чтения с разных точек зрения: -
http://www.oughttclusters.com/2007/12/datamodel-and-viewmodel/
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://www.nikhilk.net/Silverlight-ViewModel-MVC.aspx
Я думаю, что ViewModels - это сугубо .NET вещь, но я не вижу вообще причин, почему этот шаблон нельзя использовать в PHP.
Надеюсь, это поможет.
MoreDetails и т. Д.), Эти представления могут иметь разные модели представления, чтобы предоставлять только те данные, которые необходимы каждому конкретному представлению, поэтому ваши представления не зависят друг от друга. Прекрасно :)Еще кое-что для чтения с разных точек зрения: -
http://www.oughttclusters.com/2007/12/datamodel-and-viewmodel/
http://www.nikhilk.net/Silverlight-ViewModel-MVC.aspx
Я думаю, что ViewModels - это сугубо .NET вещь, но я не вижу вообще причин, почему этот шаблон нельзя использовать в PHP.
Надеюсь, это поможет.
MoreDetails и т. Д.), Эти представления могут иметь разные модели представления, чтобы предоставлять только те данные, которые необходимы каждому конкретному представлению, поэтому ваши представления не зависят друг от друга. Прекрасно :)Еще кое-что для чтения с разных точек зрения: -
http://www.oughttclusters.com/2007/12/datamodel-and-viewmodel/
http://www.nikhilk.net/Silverlight-ViewModel-MVC.aspx
Я думаю, что ViewModels - это сугубо .NET вещь, но я не вижу вообще причин, почему этот шаблон нельзя использовать в PHP.
Надеюсь, это поможет.
эээ б.
я действительно не вижу разницы между a и b, кроме некоторых технических деталей как вы будете передавать данные.
обычно вы передаете карту данных в представление с некоторыми данными из модели
В идеале, он должен «передавать данные модели в представление», чтобы представление не нуждалось в какой-либо явной структуре модели и, таким образом, было более удобным для повторного использования и проектированием.
Но на практике «передать модель на вид» работает нормально. В большинстве случаев вам все равно понадобится новое представление, потому что клиенты никогда не делятся любимыми цветами (если вы понимаете, что я имею в виду :-), поэтому повторное использование представлений не оправдывает наличия большого количества утомительного кода, необходимого для копирования данных из модели в
Что вам следует больше беспокоить, так это модульность самого контроллера, поскольку многие веб-сайты имеют общие функции (контроллеры), такие как веб-форумы или список новостей, но не внешний вид (представления)
Для меня это 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>
Вы можете реализовать это по-другому. Но я хочу сказать, что представление и модель не связаны друг с другом.
a) передать модель представлению
В противном случае контроллер управляет представлением, просматривая модель. Это то, что произошло бы в «б) передать данные модели в представление». Вариант b) на самом деле даже не имеет смысла в чистом шаблоне MVC. В конце концов, модель - это данные. Если модель изменена для потребления, представление было применено, независимо от того, хотите ли вы сделать это в контроллере и передать его как функцию контроллера. Что происходит, когда у вас другой взгляд? Контроллер по-другому экранирует свои данные? Вскоре у вас будет два представления для модели, подчиненное представление контроллера и само представление.
Я не думаю, что это так сложно. a или b.
Задача контролера - управлять отношениями. Он находит модель и представление и предоставляет представлению все данные модели, необходимые для его работы. Вот и все. MVC не диктует точную форму, которую принимают данные.
(a) Начните с простого. Довольно естественно передавать объекты модели непосредственно в представление. Если у вас есть страница о Foo, просто передайте Foo.
(b) Но иногда - и только время от времени - вы создаете объект значения / DTO для передачи данных в представление (названное выше ViewModel). Сделайте это, если есть несоответствие между представлением и собственной моделью , например, сводные обзоры. Если представление представляет собой сводку по 1 000 000 объектов, вы не хотите передавать представлению объекты модели; вы хотите передать в представление сводку по 1 000 000 объектов.
И точная реализация действительно зависит от языка и инфраструктуры, которые вы используете. Но я думаю, что эти рекомендации - хорошее начало.