Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как половчее управляться с ViewModel-ями?
|
|||
|---|---|---|---|
|
#18+
hVosttskyANAНет, это не про "Templates can be nested to any level". А я про наследование говорил.А написано про то, что шаблон может быть вложен :) hVosttВставить шаблон в шаблон очень просто, на любом уровне: @Html.Partial("OtherTemplate")Вот тут уже начинается сложный для верстальщика и пользователя синтаксис. Особенно когда нужно передать модель, не тупо как model , а Код: html 1. 2. Плюс Html.Partial - это зависимость от System.Web.Mvc. Тестировать не удобно. Hello.tpl Код: html 1. hVosttболе того, можно не просто вставить какой-то шаблон, а целый результат действия @Html.Action("MyAction")А это на фиг не нужно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2015, 09:45 |
|
||
|
Как половчее управляться с ViewModel-ями?
|
|||
|---|---|---|---|
|
#18+
hVosttskyANA Код: html 1. Ну и не вижу разницы, не знают верстальщики язык C#, но им приходится знать язык StringTemplate, который рядом не валялся с C#.Ни верстальщику, ни пользователю C# на фиг не упёрся. А вот возможность использовать готовые компоненты + быстро создавать свои, да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2015, 09:48 |
|
||
|
Как половчее управляться с ViewModel-ями?
|
|||
|---|---|---|---|
|
#18+
skyANAПлюс Html.Partial - это зависимость от System.Web.Mvc. Тестировать не удобно. Да всё удобно, мы тестируем. skyANAА написано про то, что шаблон может быть вложен :) Ну он может быть вложен и может быть отнаследован. skyANAhVosttболе того, можно не просто вставить какой-то шаблон, а целый результат действия @Html.Action("MyAction")А это на фиг не нужно :) Не согласен. @Html.Action("SomeWidget") — вот здесь, например, верстальщику важно вставить этот виджет, а виджет это не голый шаблон, это логика+шаблон, на которые в этом месте верстальщку по барабану, ему надо вставить и всё. так что ты не прав :) или, например, вот так: @Html.Action("Feedback") — форма обратной связи, это шаблон и серверная логика вывода, более того, действие может вывести вообще разные данные в зависимости от прав пользователя, например. и очень просто, вставил вызов и пошёл дальше. мы этим часто пользуемся, очень удобно. и тестированию поддаётся как нельзя лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2015, 10:05 |
|
||
|
Как половчее управляться с ViewModel-ями?
|
|||
|---|---|---|---|
|
#18+
skyANA Код: html 1. 2. Какие-то магические строки. Плохо :) @Html.Partial("SomeSubTemplate", Model.Persona) кул! или вообще вот так: @Html.DisplayFor(p => p.Persona) и с верстальщиками проблем пока не возникало. синтаксис простой, программную C# логику никто не пишет в шаблонах, а необходимый для верстальщика минимум осилит даже обезьяна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2015, 10:06 |
|
||
|
Как половчее управляться с ViewModel-ями?
|
|||
|---|---|---|---|
|
#18+
skyANAНи верстальщику, ни пользователю C# на фиг не упёрся. А вот возможность использовать готовые компоненты + быстро создавать свои, да. если пользователь может стряпать свои шаблоны, то тут придётся с тобой согласиться, ему Razor будет вреден. а для верстальщика параллельно. мы работаем с ними и никаких проблем не возникало ни разу. более того, некоторые освоили C# и пишут качественные темплейты и тесты под них. это круто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2015, 10:10 |
|
||
|
Как половчее управляться с ViewModel-ями?
|
|||
|---|---|---|---|
|
#18+
hVosttНе согласен. @Html.Action("SomeWidget") — вот здесь, например, верстальщику важно вставить этот виджет, а виджет это не голый шаблон, это логика+шаблон, на которые в этом месте верстальщку по барабану, ему надо вставить и всё. так что ты не прав :)Не нужно :) У нас CMS есть, где пользователь сам вставит нужный ему виджет (гаджет) мышкой и права настроит, если их есть для конкретного виджета (гаджета). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2015, 10:10 |
|
||
|
Как половчее управляться с ViewModel-ями?
|
|||
|---|---|---|---|
|
#18+
skyANAНе нужно :) У нас CMS есть, где пользователь сам вставит нужный ему виджет (гаджет) мышкой и права настроит, если их есть для конкретного виджета (гаджета). ну ок, это уже топ левел. мы CMS-ок не пишем, нам это не нужно. хотя CMS-ок, которые используют Razor и именно такой подход — хватает, и никого пока это не напрягало ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2015, 10:14 |
|
||
|
Как половчее управляться с ViewModel-ями?
|
|||
|---|---|---|---|
|
#18+
Не стал создавать отдельную ветку, спрошу здесь. Какие данные нужно хранить во ViewModel-и, а какие лучше в ViewBag-е? К примеру, на странице отображения списка сущностей, в модели я храню только список. Все остальное - имя текущего пользователя, ссылку на его профиль, данные для хлебных крошек навигации, список связанных сущностей (наподобие "с этим товаром чаще всего покупают") - беру из ViewBag. На странице редактирования сущности - аналогично, в модели храню только поля формы. Насколько оправдан такой подход? Может, лучше и правильнее все данные, отображаемые на странице, держать в модели? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2015, 22:46 |
|
||
|
Как половчее управляться с ViewModel-ями?
|
|||
|---|---|---|---|
|
#18+
sysauxКакие данные нужно хранить во ViewModel-и, а какие лучше в ViewBag-е? ViewModel — 1 к 1 данные, которые нужно отображать во View и принимать обратно методом POST, т.е. не больше и не меньше. Лишние поля — плохо, потому что: 1) вводят в заблуждение программистов, которые будут сопровождать и поддерживать ПО; 2) мешают при юнит-тестировании и портят карту покрытия тестами (например, dotCover будет показывать, что эти поля не используются, а если используются, то.. где? почему?). Недостаток полей приводит к кривым костылям для извлечения данных ч/з ViewBag или бог знает ещё как. ViewBag — удобно и вполне легально использовать для: 1) данных для выпадающих списков (DropDown), например по соглашению: ViewBag.ИмяПоля_Data 2) данных для настройки вложенных PartialViews и Display/EditorTeplates, например, CSS-стили и атрибуты 3) обобщённых данных, использующихся в несвязанных View, например, сообщений, алертов, т.е. частей, которые могут использоваться на любых страницах и глупо эти данные пихать во все ViewModel. 4) другие крайне специфичные вещи, которые выходят за рамки Одно Действие → Одно или несколько Представлений. Использование ViewBag не даёт контроль типов, и делает невозможным проверку на этапе компиляции, отсутствие IntelliSense усложняет сопровождение и разработку, поэтому их надо использовать совместно с жёстко заданными соглашениями на уровне компонентов (контролов) и атрибутов, т.е. желательно за рамками прикладной логики. В целом же всегда надо отдавать предпочтение строго типизированным ViewModel-ям, при чём не желательно использовать одну ViewModel в разных Views, т.е. грубо говоря одному View должна соответствовать одна ViewModel, что даёт следующее соглашение по наименованию ViewModel: КонтроллерПредставлениеViewModel. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2015, 00:51 |
|
||
|
Как половчее управляться с ViewModel-ями?
|
|||
|---|---|---|---|
|
#18+
sysauxВсе остальное - имя текущего пользователя, ссылку на его профиль, данные для хлебных крошек навигации, список связанных сущностей (наподобие "с этим товаром чаще всего покупают") - беру из ViewBag. На странице редактирования сущности - аналогично, в модели храню только поля формы. Всё правильно, эти данные выходят за рамки конкретного действия контроллера. Но в таком случае надо оформлять это таким образом, чтобы было понятно какие данные лежат ViewBag-е (мы называем его багажником). Придумывайте строгие правила для таких ситуаций. Если на странице есть независимые от действия (точнее от его результата) части: блок логина и блок хлебных крошек, то кто заполняет эти данные? Есть два удобных подхода: 1) Данные заполняет глобальный фильтр и передаёт так: ViewBag.НаименованиеЧастичногоПредставленияModel, в Layout-е, вставляется так: @Html.Partial("НаименованиеЧастичногоПредставления", ViewBag.НаименованиеЧастичногоПредставленияModel) 2) (более корректный на мой взгляд и лишённый проблемы хранения и передачи данных через ViewBag) Вставлять независимые блоки в Layout-е вот так: @Html.Action("LoginWidget", "Account") , где действие LoginWidget контроллера Account возвращает частичное представление. Преимущества второго подхода очевидны: полный контроль типов, возможность полноценного юнит-тестирования, законченный независимый компонент, который может использовать в процессе вёрстки, как плейсхолдер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2015, 01:02 |
|
||
|
Как половчее управляться с ViewModel-ями?
|
|||
|---|---|---|---|
|
#18+
hVosttКакие данные нужно хранить во ViewModel-и, а какие лучше в ViewBag-е? ViewModel — 1 к 1 данные, которые нужно отображать во View и принимать обратно методом POST, т.е. не больше и не меньше. hVosttИспользование ViewBag не даёт контроль типов, и делает невозможным проверку на этапе компиляции, отсутствие IntelliSense усложняет сопровождение и разработку, поэтому их надо использовать совместно с жёстко заданными соглашениями на уровне компонентов (контролов) и атрибутов, т.е. желательно за рамками прикладной логики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2015, 01:02 |
|
||
|
Как половчее управляться с ViewModel-ями?
|
|||
|---|---|---|---|
|
#18+
sysaux, ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2015, 01:06 |
|
||
|
Как половчее управляться с ViewModel-ями?
|
|||
|---|---|---|---|
|
#18+
Сорри, рано отправил. 1 цитата - то есть я все делал правильно))). 2 цитата - вот как раз отсутствие контроля типов и послужила причиной моего вопроса. Часто в процессе доработок в коде контроллера заносишь во ViewBag много данных, которые используешь потом в отображении. Затем, что-то удаляешь из отображения - и конечно, забываешь удалить занесение этих данных во ViewBag в коде контроллера. Чтобы не было такой каши в коде, что можно предпринять - только конвенция "считаем объекты занесенные в ViewBag в контроллере, и объекты из ViewBag используемые в отображении"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2015, 01:06 |
|
||
|
Как половчее управляться с ViewModel-ями?
|
|||
|---|---|---|---|
|
#18+
* "считаем количество объектов в контроллере и сравниваем с количеством в отображении" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2015, 01:08 |
|
||
|
Как половчее управляться с ViewModel-ями?
|
|||
|---|---|---|---|
|
#18+
sysauxЗатем, что-то удаляешь из отображения - и конечно, забываешь удалить занесение этих данных во ViewBag в коде контроллера. Чтобы не было такой каши в коде, что можно предпринять - только конвенция "считаем объекты занесенные в ViewBag в контроллере, и объекты из ViewBag используемые в отображении"? Ну незнаю, желательно избегать ViewBag, или программировать так, чтобы заведомо во ViewBag не попадали лишние неиспользуемые данные, которые легко можно упустить из виду, а также наоборот, чтобы требуемые данные попадали. Это можно сделать на уровне компонентов и атрибутов (фильтров). Т.е. в самих действиях контроллеров лучше вообще не запихивать в ViewBag ничего, иначе каша наступит неизбежно и никакие конвенции не помогут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2015, 02:47 |
|
||
|
Как половчее управляться с ViewModel-ями?
|
|||
|---|---|---|---|
|
#18+
hVosttНу незнаю, желательно избегать ViewBag, или программировать так, чтобы заведомо во ViewBag не попадали лишние неиспользуемые данные, которые легко можно упустить из виду, а также наоборот, чтобы требуемые данные попадали. Это можно сделать на уровне компонентов и атрибутов (фильтров). Т.е. в самих действиях контроллеров лучше вообще не запихивать в ViewBag ничего, иначе каша наступит неизбежно и никакие конвенции не помогут. А можно пример, как можно передать через атрибут или компонент (?) к примеру, наименование страницы, имя текущего пользователя, данные для хлебные крошек breadcrumbs и т.п.? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2015, 15:11 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=39138757&tid=1356087]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 374ms |

| 0 / 0 |
