Лучшие практики относительно модели представления и модели обновляют с подмножеством полей

Путем выбора MVC для разработки нашего нового сайта я оказываюсь посреди "лучших практик", разрабатываемых вокруг меня в очевидное реальное время. Две недели назад NerdDinner был моим руководством, но с разработкой MVC 2, даже это кажется устаревшим. Это - волнующий опыт, и я чувствую себя привилегированным, чтобы ежедневно быть в тесном контакте с умными программистами.

Прямо сейчас я наткнулся на проблему, я, может казаться, не надеваю прямой ответ - из всех блогов так или иначе - и я хотел бы получить некоторое понимание от сообщества. Это о Редактировании (чтение: действие Редактирования). Объем материала там, учебных руководств и блогов, имеет дело с созданием и просматривает модель. Таким образом, в то время как этот вопрос не может обстоятельно объяснить вопрос, я надеюсь получить некоторое движение обсуждения, способствуя моему решению о пути разработки, которую я должен взять.

Моя модель представляет пользователя с несколькими полями как имя, адрес и электронная почта. Все имена, на самом деле, на поле каждый для имени, фамилии и второго имени. Представление Details отображает все эти поля, но можно изменить только один набор полей за один раз, например, имен. Пользователь разворачивает форму, в то время как другие поля все еще видимы выше и ниже. Таким образом, форма, которая отправляется назад, содержит подмножество полей, представляющих модель.

В то время как это обращается к нам и нашим проблемам расположения по различным причинам, этого должны избежать серьезные MVC-разработчики. Я читал о некоторых шаблонах и лучших практиках, и кажется, что это не находится в ключе с парадигмой viewmodel == представление. Или я понял его превратно?

Так или иначе NerdDinner диктует FormCollection och UpdateModel использования. Все пустые поля счастливо проигнорированы. С тех пор MVC-сообщество отказалось от этого подхода к такому градусу, что ошибка в MVC 2 не была обнаружена. UpdateModel не работает без полной модели в Вашем formcollection.

Шаблон модели представления, получающий большую часть похвалы, кажется, модель представления Dedicated, которая содержит пользовательский объект модели представления и является единственной, с которой мои вопросы проектирования могли быть сделаны совместимыми. Это влечет за собой утомительный объем отображения, хотя освещается при помощи AutoMapper и идей Jimmy Bogard, который может или не может стоить. Он также делает предложение 1:1 отношения между моделью представления и представления.

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

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

13
задан Community 23 May 2017 в 12:18
поделиться

4 ответа

Недавно возникли несколько сообщений по вопросу о проверке ваших моделей, в результате чего этот пост от Brad Wilson " Valuation vills" vs. Проверитель модели в ASP.NET MVC .

Первоначальная проблема заключалась с тем, как обрабатывается ASP.NET MVC, проверяя запись в размещенной модели, и если бы были элементы вашей модели, которую вы не хотели отредактированы и не поставляли поля в поле зрения, но ваши контроллеры Работали со всей моделью, возможно, что кто-то может создать пост вашему контроллеру с дополнительными полями.

Следовательно, использование конкретной модели просмотра позволяет вам убедиться, что только поля, которые вы хотите отредактировать.

2
ответ дан 2 December 2019 в 02:05
поделиться

У меня такая же проблема, но я не смогу сформулировать его так хорошо.

В моем случае будут тонны ViewModels, потому что разные пользователи увидят различные формы на основе набора ролей. Я думаю, что отношение 1: 1 между ViewModel и View очень расплывчато. Что делать, если я напишу Uber-View, который в значительной степени просто использует reductionFormodel и не намного больше? Теперь у меня есть один, хотя и весьма вырождается, просмотра для всего, поэтому у меня также есть только один ViewModel?

Моя идея состояла в том, чтобы написать EditressFormodel , который работает не только на основе отражения (то есть информации, известной При компиляционном времени), но и включенные (конкретные домена) правила выполнения, например, регулируемые текущей ролью пользователя, текущим временем и т. Д. Следовательно, также необходимо написать пользовательский ModelBinder с проверкой. Как пользовательское отображение от модели для ViewModel. Тем не менее, это держит меня от написания глупых и, таким образом,, таким образом, безрезультатный код.

Так как моя модель (или доменModel) содержит много логики, я не хочу, чтобы она была изменена через ModelBinding. Более того, поскольку невозможно узнать, какие поля будут присутствовать во время компиляции, обеспечивая необходимую подходящую проблему просмотра. Однако «полное», то есть максимальная просмотра модерна известна. Отображение от ViewModel в модель снова включает в себя пользовательский код, но до тех пор, пока правила могут быть оформлены, что должно работать.

Извините, мой текст очень запутанный, но я очень растерялся прямо сейчас, плюс я должен бежать. Как и C.T., тоже не мог прокомментировать.

0
ответ дан 2 December 2019 в 02:05
поделиться

Посмотрите это. Это путь к ASP.NET MVC 2.

        public void Update(MyModel model)
        {
            var myModelObject = MyRepository.GetInstance(model.Id);
            if(myModelObject != null)
            {
                ModelCopier.CopyModel(model, myModelObject);
            }
            MyRepository.Save(myModelObject);
        }

ModelCopier.CopyModel(obj from, obj to) - новая функция в последней версии MvcFutures. Также обязательно ознакомьтесь с расширяемой связкой моделей в MVC Futures 2.

0
ответ дан 2 December 2019 в 02:05
поделиться

Я делаю это следующим образом (отображение выполняется автоматически внутри modelBuilder с помощью ValueInjecter):

У меня есть пример asp. net-mvc приложения, где я демонстрирую лучшие практики выполнения этого в mvc, вы можете увидеть его в скачать valueinjecter

 public ActionResult Edit(long id)
 {
      return View(modelBuilder.BuildModel(personService.Get(id)));
 }

 [HttpPost]
 public ActionResult Edit(PersonViewModel model)
 {
    if (!ModelState.IsValid)
       return View(modelBuilder.RebuildModel(model));    
       personService.Save(modelBuilder.BuildEntity(model));
       return RedirectToAction("Index");
 }

быстрая демонстрация ValueInjecter:

//build viewmodel
    personViewModel.InjectFrom(person)
                   .InjectFrom<CountryToLookup>(person);

//build entity
    person.InjectFrom(personViewModel)
          .InjectFrom<LookupToCountry>(personViewModel);
3
ответ дан 2 December 2019 в 02:05
поделиться
Другие вопросы по тегам:

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