ASP.NET шаблон MVC ViewModel

У менеджера по стандартной сети из Ubuntu нет опции повторного набора для USB-модемов, которая является причиной для всех проблем

, Вот то, что я сделал для устранения моих проблем соединения с пламенем MTS.

Установка PPP Gnome, который является фронтендом для Выполнения WvDial

ниже команды в терминале для установки.

sudo Кв. - получает гнома ppp

установки, И для отключенного значка сети вот quickfix:

21
задан 13 revs 11 February 2012 в 20:59
поделиться

4 ответа

Есть пара вещей, которые меня беспокоят.

  1. Терминология. ViewModel в данном случае представляет собой простые данные представления, которые заполняются и затем используются контроллером. View ничего не знает о контроллере, поскольку инфраструктура ASP.NET MVC отвечает за выбор контроллеров и соответствующие действия. Контроллер обрабатывает взаимодействие с пользователем. Я думаю, что это больше похоже на Passive View, чем на ViewModel (я предполагаю, что под ViewModel вы имеете в виду шаблон Model-View-ViewModel)

  2. Подробности. Контроллер, заполняющий данные представления, не должен знать подробностей о том, как реализовано представление. Однако OrganisationViewModel.Country раскрывает ненужные детали (SelectListItem - это чистая деталь реализации представления). Таким образом, делая контроллер зависимым от деталей реализации представления. Я думаю, что это нужно изменить, чтобы этого не произошло. Подумайте об использовании некоторого объекта, который будет содержать данные для страны.

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

9
ответ дан 29 November 2019 в 21:49
поделиться

Привет, после долгого просмотра веб-страниц я нашел решение своей проблемы

resources.router.routes.www.type = "Zend_Controller_Router_Route_Hostname"
resources.router.routes.www.route = ":module.findchennai.com"
resources.router.routes.www.defaults.module = "www"
resources.router.routes.www.chains.index.type = "Zend_Controller_Router_Route"
resources.router.routes.www.chains.index.route = ":controller/:action/*"
resources.router.routes.www.chains.index.defaults.controller = "index"
resources.router.routes.www.chains.index.defaults.action = "index"

Приведенный выше код отображает модуль с субдоменом

resources.router.routes.news.type = "Zend_Controller_Router_Route_Hostname"
resources.router.routes.news.route = "news.findchennai.com"
resources.router.routes.news.defaults.module = "news"

resources.router.routes.edu.type = "Zend_Controller_Router_Route_Hostname"
resources.router.routes.edu.route = "education.findchennai.com"
resources.router.routes.edu.defaults.module = "education"

resources.router.routes.edu.chains.list.type = "Zend_Controller_Router_Route"
resources.router.routes.edu.chains.list.route = ":categ/:page"
resources.router.routes.edu.chains.list.defaults.controller = "index"
resources.router.routes.edu.chains.list.defaults.action = "category"
resources.router.routes.edu.chains.list.defaults.page = 1

resources.router.routes.news.chains.list.type = "Zend_Controller_Router_Route"
resources.router.routes.news.chains.list.route = ":categ/:page"
resources.router.routes.news.chains.list.defaults.controller = "index"
resources.router.routes.news.chains.list.defaults.action = "category"
resources.router.routes.news.chains.list.defaults.page = 1

Это решает проблему, с которой я столкнулся, и теперь могу правильно сопоставить со следующими URL-адресами

http://news.mysite.com/27-08-09/sample.html
http://education.mysite.com/27-08-09/sample.html

Тем не менее, если кто-то знает, как оптимизировать приведенный выше код, дайте мне знать.

Как правило, неплохо создавать модели представления для объектов предметной области.

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

public OrganisationViewModel() : this(new Organisation()) { }

public OrganisationViewModel(Organisation o)
{
  Organisation = o;
  InitCollections();
}

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

1
ответ дан 29 November 2019 в 21:49
поделиться

Это очень похоже на рекомендуемую практику в книге Wrox Professional ASP.NET MVC , первая глава которой доступна бесплатно по указанному выше URL.

Начиная со страницы 100, у них есть раздел, посвященный ViewData и ViewModels .

Когда класс контроллера решает вернуть ответ HTML клиенту, он отвечает за явную передачу в шаблон представления всех данные, необходимые для отображения ответа. Шаблоны представлений никогда не должны выполнять какие-либо операции извлечения данных или логику приложения - вместо этого они должны ограничиваться только кодом визуализации, который управляется моделью / данными, переданными ему контроллером.

[...]

При использовании шаблона ["ViewModel"] мы создаем строго типизированные классы, которые оптимизированы для наших конкретных сценариев представления и которые предоставляют свойства для динамических значений / контента, необходимых для наших шаблонов представления. . Затем наши классы контроллеров могут заполнить и передать эти оптимизированные для представления классы в наш шаблон представления для использования. Это обеспечивает типобезопасность, проверку во время компиляции и intellisense редактора в шаблонах представлений.

Взято из «Главы 1« Ужин ботаника »из Professional ASP.NET MVC 1.0, написанной Робом Коннери и др., Опубликованной Wrox». Оригинал доступен по адресу http://tinyurl.com/aspnetmvc

11
ответ дан 29 November 2019 в 21:49
поделиться

Мы начали это делать, но наши контроллеры начали становиться чудовищными (поскольку наши ViewModels не обязательно отображались 1: 1 к нашей базе данных). Чтобы облегчить это, мы создали классы Mapper, которые создают ViewModel, а затем сопоставляют данные, привязанные к базе данных. Затем контроллер просто вызывает методы класса Mapper. Кажется, работает хорошо.

1
ответ дан 29 November 2019 в 21:49
поделиться
Другие вопросы по тегам:

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