powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как половчее управляться с ViewModel-ями?
16 сообщений из 216, страница 9 из 9
Как половчее управляться с ViewModel-ями?
    #39063819
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAНет, это не про "Templates can be nested to any level".

А я про наследование говорил.А написано про то, что шаблон может быть вложен :)

hVosttВставить шаблон в шаблон очень просто, на любом уровне: @Html.Partial("OtherTemplate")Вот тут уже начинается сложный для верстальщика и пользователя синтаксис. Особенно когда нужно передать модель, не тупо как model , а
Код: html
1.
2.
<$ Hello(name="Vasya") $>
<$ Hello(name="Petya") $>


Плюс Html.Partial - это зависимость от System.Web.Mvc. Тестировать не удобно.

Hello.tpl
Код: html
1.
<h1>Hello, <$ name $>!</h1>



hVosttболе того, можно не просто вставить какой-то шаблон, а целый результат действия @Html.Action("MyAction")А это на фиг не нужно :)
...
Рейтинг: 0 / 0
Как половчее управляться с ViewModel-ями?
    #39063825
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANA
Код: html
1.
<$ Header() $>



Ну и не вижу разницы, не знают верстальщики язык C#, но им приходится знать язык StringTemplate, который рядом не валялся с C#.Ни верстальщику, ни пользователю C# на фиг не упёрся. А вот возможность использовать готовые компоненты + быстро создавать свои, да.
...
Рейтинг: 0 / 0
Как половчее управляться с ViewModel-ями?
    #39063851
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAПлюс Html.Partial - это зависимость от System.Web.Mvc. Тестировать не удобно.

Да всё удобно, мы тестируем.

skyANAА написано про то, что шаблон может быть вложен :)

Ну он может быть вложен и может быть отнаследован.

skyANAhVosttболе того, можно не просто вставить какой-то шаблон, а целый результат действия @Html.Action("MyAction")А это на фиг не нужно :)

Не согласен.

@Html.Action("SomeWidget") — вот здесь, например, верстальщику важно вставить этот виджет, а виджет это не голый шаблон, это логика+шаблон, на которые в этом месте верстальщку по барабану, ему надо вставить и всё. так что ты не прав :)

или, например, вот так:

@Html.Action("Feedback") — форма обратной связи, это шаблон и серверная логика вывода, более того, действие может вывести вообще разные данные в зависимости от прав пользователя, например. и очень просто, вставил вызов и пошёл дальше. мы этим часто пользуемся, очень удобно. и тестированию поддаётся как нельзя лучше.
...
Рейтинг: 0 / 0
Как половчее управляться с ViewModel-ями?
    #39063852
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA
Код: html
1.
2.
<$ Hello(name="Vasya") $>
<$ Hello(name="Petya") $>



Какие-то магические строки. Плохо :)

@Html.Partial("SomeSubTemplate", Model.Persona)

кул!

или вообще вот так:

@Html.DisplayFor(p => p.Persona)

и с верстальщиками проблем пока не возникало. синтаксис простой, программную C# логику никто не пишет в шаблонах, а необходимый для верстальщика минимум осилит даже обезьяна.
...
Рейтинг: 0 / 0
Как половчее управляться с ViewModel-ями?
    #39063860
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНи верстальщику, ни пользователю C# на фиг не упёрся. А вот возможность использовать готовые компоненты + быстро создавать свои, да.

если пользователь может стряпать свои шаблоны, то тут придётся с тобой согласиться, ему Razor будет вреден.

а для верстальщика параллельно. мы работаем с ними и никаких проблем не возникало ни разу. более того, некоторые освоили C# и пишут качественные темплейты и тесты под них. это круто.
...
Рейтинг: 0 / 0
Как половчее управляться с ViewModel-ями?
    #39063861
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttНе согласен.

@Html.Action("SomeWidget") — вот здесь, например, верстальщику важно вставить этот виджет, а виджет это не голый шаблон, это логика+шаблон, на которые в этом месте верстальщку по барабану, ему надо вставить и всё. так что ты не прав :)Не нужно :) У нас CMS есть, где пользователь сам вставит нужный ему виджет (гаджет) мышкой и права настроит, если их есть для конкретного виджета (гаджета).
...
Рейтинг: 0 / 0
Как половчее управляться с ViewModel-ями?
    #39063867
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНе нужно :) У нас CMS есть, где пользователь сам вставит нужный ему виджет (гаджет) мышкой и права настроит, если их есть для конкретного виджета (гаджета).

ну ок, это уже топ левел. мы CMS-ок не пишем, нам это не нужно.

хотя CMS-ок, которые используют Razor и именно такой подход — хватает, и никого пока это не напрягало
...
Рейтинг: 0 / 0
Как половчее управляться с ViewModel-ями?
    #39138701
sysaux
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не стал создавать отдельную ветку, спрошу здесь.

Какие данные нужно хранить во ViewModel-и, а какие лучше в ViewBag-е?
К примеру, на странице отображения списка сущностей, в модели я храню только список. Все остальное - имя текущего пользователя, ссылку на его профиль, данные для хлебных крошек навигации, список связанных сущностей (наподобие "с этим товаром чаще всего покупают") - беру из ViewBag. На странице редактирования сущности - аналогично, в модели храню только поля формы.

Насколько оправдан такой подход? Может, лучше и правильнее все данные, отображаемые на странице, держать в модели?
...
Рейтинг: 0 / 0
Как половчее управляться с ViewModel-ями?
    #39138733
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
public class EmployeeController
{
    public ActionResult Index()
    {
        var model = new EmployeeIndexViewModel { ... };
        return View(model);
    }
}
...
Рейтинг: 0 / 0
Как половчее управляться с ViewModel-ями?
    #39138737
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysauxВсе остальное - имя текущего пользователя, ссылку на его профиль, данные для хлебных крошек навигации, список связанных сущностей (наподобие "с этим товаром чаще всего покупают") - беру из ViewBag. На странице редактирования сущности - аналогично, в модели храню только поля формы.

Всё правильно, эти данные выходят за рамки конкретного действия контроллера. Но в таком случае надо оформлять это таким образом, чтобы было понятно какие данные лежат ViewBag-е (мы называем его багажником). Придумывайте строгие правила для таких ситуаций.

Если на странице есть независимые от действия (точнее от его результата) части: блок логина и блок хлебных крошек, то кто заполняет эти данные?

Есть два удобных подхода:

1) Данные заполняет глобальный фильтр и передаёт так: ViewBag.НаименованиеЧастичногоПредставленияModel, в Layout-е, вставляется так: @Html.Partial("НаименованиеЧастичногоПредставления", ViewBag.НаименованиеЧастичногоПредставленияModel)

2) (более корректный на мой взгляд и лишённый проблемы хранения и передачи данных через ViewBag) Вставлять независимые блоки в Layout-е вот так:

@Html.Action("LoginWidget", "Account")

, где действие LoginWidget контроллера Account возвращает частичное представление.

Преимущества второго подхода очевидны: полный контроль типов, возможность полноценного юнит-тестирования, законченный независимый компонент, который может использовать в процессе вёрстки, как плейсхолдер.
...
Рейтинг: 0 / 0
Как половчее управляться с ViewModel-ями?
    #39138738
sysaux
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttКакие данные нужно хранить во ViewModel-и, а какие лучше в ViewBag-е?

ViewModel — 1 к 1 данные, которые нужно отображать во View и принимать обратно методом POST, т.е. не больше и не меньше.

hVosttИспользование ViewBag не даёт контроль типов, и делает невозможным проверку на этапе компиляции, отсутствие IntelliSense усложняет сопровождение и разработку, поэтому их надо использовать совместно с жёстко заданными соглашениями на уровне компонентов (контролов) и атрибутов, т.е. желательно за рамками прикладной логики.
...
Рейтинг: 0 / 0
Как половчее управляться с ViewModel-ями?
    #39138740
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysaux,

?
...
Рейтинг: 0 / 0
Как половчее управляться с ViewModel-ями?
    #39138741
sysaux
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, рано отправил.
1 цитата - то есть я все делал правильно))).

2 цитата - вот как раз отсутствие контроля типов и послужила причиной моего вопроса. Часто в процессе доработок в коде контроллера заносишь во ViewBag много данных, которые используешь потом в отображении. Затем, что-то удаляешь из отображения - и конечно, забываешь удалить занесение этих данных во ViewBag в коде контроллера. Чтобы не было такой каши в коде, что можно предпринять - только конвенция "считаем объекты занесенные в ViewBag в контроллере, и объекты из ViewBag используемые в отображении"?
...
Рейтинг: 0 / 0
Как половчее управляться с ViewModel-ями?
    #39138742
sysaux
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
* "считаем количество объектов в контроллере и сравниваем с количеством в отображении"
...
Рейтинг: 0 / 0
Как половчее управляться с ViewModel-ями?
    #39138757
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysauxЗатем, что-то удаляешь из отображения - и конечно, забываешь удалить занесение этих данных во ViewBag в коде контроллера. Чтобы не было такой каши в коде, что можно предпринять - только конвенция "считаем объекты занесенные в ViewBag в контроллере, и объекты из ViewBag используемые в отображении"?

Ну незнаю, желательно избегать ViewBag, или программировать так, чтобы заведомо во ViewBag не попадали лишние неиспользуемые данные, которые легко можно упустить из виду, а также наоборот, чтобы требуемые данные попадали. Это можно сделать на уровне компонентов и атрибутов (фильтров).

Т.е. в самих действиях контроллеров лучше вообще не запихивать в ViewBag ничего, иначе каша наступит неизбежно и никакие конвенции не помогут.
...
Рейтинг: 0 / 0
Как половчее управляться с ViewModel-ями?
    #39139383
sysaux
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttНу незнаю, желательно избегать ViewBag, или программировать так, чтобы заведомо во ViewBag не попадали лишние неиспользуемые данные, которые легко можно упустить из виду, а также наоборот, чтобы требуемые данные попадали. Это можно сделать на уровне компонентов и атрибутов (фильтров).

Т.е. в самих действиях контроллеров лучше вообще не запихивать в ViewBag ничего, иначе каша наступит неизбежно и никакие конвенции не помогут.

А можно пример, как можно передать через атрибут или компонент (?) к примеру, наименование страницы, имя текущего пользователя, данные для хлебные крошек breadcrumbs и т.п.?
...
Рейтинг: 0 / 0
16 сообщений из 216, страница 9 из 9
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как половчее управляться с ViewModel-ями?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]