powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / мапинг
25 сообщений из 26, страница 1 из 2
мапинг
    #38451376
jfjfjfjfjfjffj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В классе модели для вьюхи есть ряд подклассов. Если мапировать все это в контроллере получается куча кода. Как быть
...
Рейтинг: 0 / 0
мапинг
    #38451380
Фотография Абсолют
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jfjfjfjfjfjffjВ классе модели для вьюхи есть ряд подклассов. Если мапировать все это в контроллере получается куча кода. Как быть
AutoMapper, если я правильно понял вопрос.
...
Рейтинг: 0 / 0
мапинг
    #38451391
jfjfjfjfjfjffj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АбсолютjfjfjfjfjfjffjВ классе модели для вьюхи есть ряд подклассов. Если мапировать все это в контроллере получается куча кода. Как быть
AutoMapper, если я правильно понял вопрос.

упростил.

public class ListViewModel
{
public IList<ViewModel> List { get; set; }
public PagerViewModel PagerViewModel { get; set; }
}

как при помощи автомаппера смапировать PagerViewModel . Не пойму из доков
...
Рейтинг: 0 / 0
мапинг
    #38451690
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jfjfjfjfjfjffjВ классе модели для вьюхи есть ряд подклассов. Если мапировать все это в контроллере получается куча кода. Как бытьВынести этот код в отдельный класс, в контроллере оставить только:
Код: c#
1.
ListViewModel viewModel = mapper.ToViewModel(model);
...
Рейтинг: 0 / 0
мапинг
    #38456411
jfjfjfjfjfjffj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAjfjfjfjfjfjffjВ классе модели для вьюхи есть ряд подклассов. Если мапировать все это в контроллере получается куча кода. Как бытьВынести этот код в отдельный класс, в контроллере оставить только:
Код: c#
1.
ListViewModel viewModel = mapper.ToViewModel(model);



ну все равно куча кода:) в ToViewModel придется передавать классы которые нужно приделывать к вью модели
...
Рейтинг: 0 / 0
мапинг
    #38456431
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jfjfjfjfjfjffjskyANAпропущено...
Вынести этот код в отдельный класс, в контроллере оставить только:
Код: c#
1.
ListViewModel viewModel = mapper.ToViewModel(model);



ну все равно куча кода:) в ToViewModel придется передавать классы которые нужно приделывать к вью моделиНу можно и не передавать, а получать их внутри маппера.
...
Рейтинг: 0 / 0
мапинг
    #38456440
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Model-View-Controller
Наиболее частые ошибкиНачинающие программисты (особенно в веб-программировании, где аббревиатура MVC стала популярна) очень часто трактуют архитектурную модель MVC как пассивную модель MVC. В этом случае модель выступает исключительно совокупностью функций для доступа к данным, а контроллер содержит бизнес-логику. В результате код моделей по факту является средством получения данных из СУБД, а контроллер представляет собой типичный модуль, наполненный бизнес-логикой, или скрипт в терминологии веб-программирования. В результате такого понимания MVC разработчики стали писать код, который Pádraic Brady, известный в кругах сообщества Zend Framework, охарактеризовал как ТТУК — «Толстые тупые уродливые контроллеры» (Fat Stupid Ugly Controllers):ПримечаниеСреднестатистический ТТУК получал данные из БД (используя уровень абстракции базы данных, делая вид, что это модель) или манипулировал, проверял, записывал, а также передавал данные в вид. Такой подход стал очень популярен потому, что использование таких контроллеров похоже на классическую практику использования отдельного php-файла для каждой страницы приложения.Но в объектно-ориентированном программировании используется активная модель MVC, где модель — это не только совокупность кода доступа к данным и СУБД, а вся бизнес-логика. В свою очередь, контроллеры представляют собой лишь элементы системы, в чьи непосредственные обязанности входит приём данных из запроса и передача их другим элементам системы. Только в этом случае контроллер становится «тонким» и выполняет исключительно функцию связующего звена (glue layer) между отдельными компонентами системы.
...
Рейтинг: 0 / 0
мапинг
    #38456470
jfjfjfjfjfjffj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA Model-View-Controller
Наиболее частые ошибкиНачинающие программисты (особенно в веб-программировании, где аббревиатура MVC стала популярна) очень часто трактуют архитектурную модель MVC как пассивную модель MVC. В этом случае модель выступает исключительно совокупностью функций для доступа к данным, а контроллер содержит бизнес-логику. В результате код моделей по факту является средством получения данных из СУБД, а контроллер представляет собой типичный модуль, наполненный бизнес-логикой, или скрипт в терминологии веб-программирования. В результате такого понимания MVC разработчики стали писать код, который Pádraic Brady, известный в кругах сообщества Zend Framework, охарактеризовал как ТТУК — «Толстые тупые уродливые контроллеры» (Fat Stupid Ugly Controllers):пропущено...
Но в объектно-ориентированном программировании используется активная модель MVC, где модель — это не только совокупность кода доступа к данным и СУБД, а вся бизнес-логика. В свою очередь, контроллеры представляют собой лишь элементы системы, в чьи непосредственные обязанности входит приём данных из запроса и передача их другим элементам системы. Только в этом случае контроллер становится «тонким» и выполняет исключительно функцию связующего звена (glue layer) между отдельными компонентами системы.

это понятно. непонятно как внутри мапера получить ... часть параметров передается из репозитория, часть из формы, которая передается именно контроллеру
...
Рейтинг: 0 / 0
мапинг
    #38459074
jfjfjfjfjfjffj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jfjfjfjfjfjffjskyANA Model-View-Controller
пропущено...


это понятно. непонятно как внутри мапера получить ... часть параметров передается из репозитория, часть из формы, которая передается именно контроллеру
мож есть какие мысли?
...
Рейтинг: 0 / 0
мапинг
    #38459078
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jfjfjfjfjfjffjмож есть какие мысли?

никак не быть. маппинг, это функция с одним входным параметром и одним выходным, в общем случае. остальное, это конфигурация.

так что оборачивайте свою кучу кода в хелпер и радуйтесь ))
...
Рейтинг: 0 / 0
мапинг
    #38459108
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jfjfjfjfjfjffjjfjfjfjfjfjffjпропущено...


это понятно. непонятно как внутри мапера получить ... часть параметров передается из репозитория, часть из формы, которая передается именно контроллеру
мож есть какие мысли?А мне вот кажется, что Вы так и не поняли, что такое модель. Код покажите.
...
Рейтинг: 0 / 0
мапинг
    #38459303
jfjfjfjfjfjffj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAjfjfjfjfjfjffjпропущено...

мож есть какие мысли?А мне вот кажется, что Вы так и не поняли, что такое модель. Код покажите.
по-моему - понял.
...
public ActionResult Index(int idRubric = 1, int nPage = 1)
{
IList<_List> _List= Repo.GetListByIdRubric(idRubric);
ListViewModel _ListViewModel = new ListViewModel();
PagerViewModel _PagerViewModel = new PagerViewModel();

_PagerViewModel.nPageNumber = Repo.GetPageCount();
_PagerViewModel.nCurrentPage = nPage;

_ViewModel1.prop1= Repo.GetSomething1();
_ViewModel2.prop2= Repo.GetSomething2();

...

_ViewModelN.prop1= Repo.GetSomethingN();
_ViewModelN.prop2= Repo.GetSomethingN();


_ListViewModel.List = Mapper.Map<IList<_List>, IList<ListViewModel>>(_List);
_ListViewModel.PagerViewModel = _PagerViewModel;

...

_ListViewModel.ViewModelN= _ViewModelN;

return View(_ListViewModel);
}

PagerViewModel нужен для партиал вью.
И таких классов не один (не один партиал вью на странице)
Вместо int idRubric = 1, int nPage = 1 можно класс забубенить, Но что это меняет...
Mapper - автомапер
Я чет туплю. Не пойму как красивее сделать. Колбаса выходит как ни крути
...
Рейтинг: 0 / 0
мапинг
    #38465719
goblinhdhdh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем отвечать на этот вопрос!!!
...
Рейтинг: 0 / 0
мапинг
    #38465730
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goblinhdhdh,

У меня есть доска, и десятки разных по величине ржавых гвоздей. Я скачал через NuGet молоток. Всем хорош, но не умеет забивать сразу все гвозди. Что делать, подскажите? НЕужели колотить по каждому гвоздю?!
...
Рейтинг: 0 / 0
мапинг
    #38465731
jfjfjfjfjfjffj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttgoblinhdhdh,

У меня есть доска, и десятки разных по величине ржавых гвоздей. Я скачал через NuGet молоток. Всем хорош, но не умеет забивать сразу все гвозди. Что делать, подскажите? НЕужели колотить по каждому гвоздю?!
Мораль сей басни какова?
...
Рейтинг: 0 / 0
мапинг
    #38465737
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jfjfjfjfjfjffjМораль сей басни какова?

вы хотите слишком многого от молотка. типа такой большой молоток, чтобы одним махом... нет такого. уже писал вам выше. сборную модель надо собирать самому.
...
Рейтинг: 0 / 0
мапинг
    #38465742
jfjfjfjfjfjffj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttjfjfjfjfjfjffjМораль сей басни какова?
вы хотите слишком многого от молотка. типа такой большой молоток, чтобы одним махом... нет такого. уже писал вам выше. сборную модель надо собирать самому.
Если Вы про автомаппер, то давайте его оставим в покое. Мне неясно как код причесать. Получается колбаса как ни крути
...
Рейтинг: 0 / 0
мапинг
    #38465744
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jfjfjfjfjfjffjПолучается колбаса как ни крути

крутите лучше, чтобы колбаса была вкуснее

в общем, что конкретно вас не устраивает: внешний вид (много кодо) ? или что?
...
Рейтинг: 0 / 0
мапинг
    #38465747
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jfjfjfjfjfjffj,

пишите вспомогательные методы, для сбора одного и того же. не знаю. зависит от всего остального кода, чтобы вам что-то конкретное предложить.

лично для меня, появление необходимости вот таких сборных вью приводит к необходимости пересмотреть архитектуру данных с последующей (пере) нормализацией. таким образом, чтобы существовал чётко выраженный корень аггрегации, и в итоге все решается одним автомаппером.
...
Рейтинг: 0 / 0
мапинг
    #38465781
jfjfjfjfjfjffj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttjfjfjfjfjfjffj,

пишите вспомогательные методы, для сбора одного и того же. не знаю. зависит от всего остального кода, чтобы вам что-то конкретное предложить.

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

Чет я опять туплю. Возьмем отвлеченный пример. Ну например форум. /вот есть сообщение форума. в сообщении должна отображаться информация о пользователе (класс) О рубриках(ну тож класс) О Страницах(тож класс) Реклама(класс) Различные информационные блоки: Например подборка статей (класс) и тп. как в этой архитектуре с корнями быть? Включение используется для того, чтоб передавать включаемые классы модели в патиал вью во вьюхе.
...
Рейтинг: 0 / 0
мапинг
    #38465839
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jfjfjfjfjfjffjЧет я опять туплю. Возьмем отвлеченный пример. Ну например форум. /вот есть сообщение форума. в сообщении должна отображаться информация о пользователе (класс) О рубриках(ну тож класс) О Страницах(тож класс) Реклама(класс) Различные информационные блоки: Например подборка статей (класс) и тп. как в этой архитектуре с корнями быть? Включение используется для того, чтоб передавать включаемые классы модели в патиал вью во вьюхе.

Всё!

Я понял вашу проблему. Вы что-нибудь слышали про принцип «Разделяй и властвуй!»? Если нет, спросите у Гая Юлия.

Короче. Вы собирайте в контроллере информацию для разных инфо-блоках, чтобы напихать их во вью. Это в корне не верно. Плохая архитектура. Просто ужас.

Вместо этого. Каждый инфо-блок должен представлять собой отдельный Action (и даже отдельного контроллера), который возвращает PartialView. Ваше вью в итоге будет выглядеть примерно так:

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@model PostViewModel
бла-бла-бла
@Html.Action("Widget", "Rubrics")
бла-бла-бла
@Html.Action("Widget", "Adversting")
бла-бла-бла
@Html.Action("Related", "Posts")
бла-бла-бла
тут отображение вашего сообщения форума PostViewModel
бла-бла-бла



Каждое действие отдельного контроллера берет только свою информацию и маппит в простое вью. Потом это по кускам собирается на странице.

Вот и решение вашей проблемы. В любом случае, когда у вас возникает такая ситуация, что вам надо напихать во вью разнородной информацией, это не просто сигнал, это ALARM-тревога, что надо производить декомпозицию.
...
Рейтинг: 0 / 0
мапинг
    #38465843
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если отображение блока надо как-то кастомизировать, связать с основным выводом, то вы сегда можете передать параметры:

@Html.Action("RelatedArticlesForPost", "Articles", new { postId = Model.Id })
...
Рейтинг: 0 / 0
мапинг
    #38465857
jfjfjfjfjfjffj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttесли отображение блока надо как-то кастомизировать, связать с основным выводом, то вы сегда можете передать параметры:

@Html.Action("RelatedArticlesForPost", "Articles", new { postId = Model.Id })

ааа. спасибо. ясно.
а почему включение является плохой архитектурой... ну что колбаса выходит это понятно.
а еще в чем минусы.
Вы как-то обосновать это можете?
...
Рейтинг: 0 / 0
мапинг
    #38465872
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jfjfjfjfjfjffjВы как-то обосновать это можете?

Если это до сих пор для вас не очевидно, сначала плюсы:

Каждый контроллер работает только со своей сущностью и не зависит от остальных (реализуя таким образом один из принципов SOLID )

У каждого действия контроллера может быть своя политика кеширования (допустим, для виджета со статистикой, вы не захотите каждый раз дёргать СУБД тяжёлым вычислительным запросом, кешируя вывод на 1 час или сутки в зависимости от его «тяжести»)

Каждое действие и каждый контроллер отдельно тестируются.

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

Виджет можно легко вырубить, закомментировав или убрав строчку кода из вью. И не говорите, что с с @Html.PartialView якобы тоже самое. Нет, в последнем случае вы всего лишь отключаете вывод, но сбор данных и формирования ViewModel всё равно происходит).

Представление любого виджета можно легко поменять, не модифицируя при этом кучу зависимого кода.
...

теперь минусы:


Лишаетесь всех вышеперечисленных преимущества.

Если подобный виджет надо отобразить где-то ещё, придётся поднапрячься, упаковав пачку данных в другую модель. Ну и что-нибудь изменить выльется в дополнительный гемор.

Вызов ChildAction связан с дополнительными накладными расходами, но ими можно пренебречь.

Такую лапшу сильносвязанного кода очень тяжело поддерживать, а программистов, которые на такое соглашаются надо стрелять, ибо в плохих архитектурах больше виноваты не те, кто их создаёт, а кто не сопротивляется и за-ради-зарплаты готов ковыряться по колено в говне вместе с другими подаванами.

Ещё вопросы?
...
Рейтинг: 0 / 0
мапинг
    #38465874
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а ну да, ещё один доп. бонус.

сегодня виджет у вас отображается как @Html.Action("Widget", "Controller"...)
а завтра вы захотите загружать его через AJAX,
всё что вам нужно будет сделать в простейшем случае, это заменить @Html.Action на <div id="myWidget"></div> и добавить в скрипты $('#myWidget').get('@Url.Action("Widget", "Controller"...');
понимаете, какая гибкость? ))

можно пойти и дальше, но уже не будем об этом. будет хорошо, если мне удалось донести до вас свою Мысль.
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / мапинг
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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