Как обработать модель представления с несколькими совокупными корнями?

В данный момент я получил вполне плохо сформированную модель представления.

Классы похожи на это =>

 public class AccountActionsForm
    {
        public Reader Reader { get; set; }
        //something...
    }

Проблема состоит в том, что тип Читателя прибывает из модели предметной области (нарушение SRP).

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

Я знаю о платформе AutoMapper, и я, вероятно, собираюсь использовать ее.

Так, еще раз - что такое общие глюки при попытке создать надлежащую модель представления? Как структурировать его? Как отображение сделано, когда там кратный, объект области ввел необходимый?


Я смущен случаями, когда для представления нужны данные больше чем из 1 совокупного корня. Я создаю приложение, которое имеет объекты как Библиотека, Читатель, BibliographicRecord и т.д.

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

Таким образом - кажется прекрасным создать представление OrderedBooksList с OrderedBooksListModel просмотрите модель под этим, содержит LibraryOutput, ReaderOutput и BibliographicRecordOutput модели представления. Или еще лучше - OrderedBooksListModel просмотрите модель, которая усиливает сглаживающуюся технику и имеет опоры как ReaderFirstName, LibraryName и т.д.

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

И что относительно полей модели представления, которые живут просто на уровне UI (т.е. перечисление, которое указывает на проверенную вкладку)?

Это то, что все делают в таких случаях?

 FooBarViewData fbvd = new FooBarViewData();
   fbvd.Foo = new Foo(){ A = "aaa"};
   fbvd.Bar = new Bar(){ B = "bbb"};
   return View(fbvd);

Я не готов сделать это =>

var fbvd = new FooBarViewData();
   fbvd.FooOutput =  _mapper.Map(new Foo(){ A = "aaa"});
   fbvd.BarOutput = _mapper.Map(new Bar(){ B = "bbb"});
   return View(fbvd);

Походит на большую запись.:)


Чтение этого в данный момент. И это.


Хорошо. Я думал об этой проблеме много и да - добавляющий, что другой уровень абстракции походит на решение =>

alt text

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

ty Jimmy

5
задан Glorfindel 30 May 2019 в 13:05
поделиться

3 ответа

Если возможно, откройте первый файл только для чтения, ( O_RDONLY ) в Linux. Затем, если вы попытаетесь открыть его снова, чтобы написать ему, вы получите ошибку.

-121--3554017-

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

На стороне контроллера мы создаем богатый график того, что нужно для создания модели просмотра. Это может быть просто единый совокупный корню, или это может быть композиция из нескольких совокупных корней. Все они вместе объединяются в то, что мы называем моделью презентации. Иногда модель презентации является только нашей моделью настойчивости (домена), но иногда это совершенно новый объект. Тем не менее, о том, что мы нашли на практике, заключается в том, что если нам нужно построить композиционную модель презентации, она имеет тенденцию стать магнитом для соответствующего поведения.

В вашем примере я бы создал видовой проблематизм, а просмотра обарвевмодель (или видоизообармодельдер). Затем я могу поговорить о ViewFoobarmodel в моем контроллере, а затем полагаться на сопоставление, чтобы сгладить то, что мне нужно от этой промежуточной модели с Automapper.

4
ответ дан 13 December 2019 в 19:28
поделиться

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

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

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

.
3
ответ дан 13 December 2019 в 19:28
поделиться

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

Мы используем ViewModels для рендеринга данных, но быстро выяснилось, что, когда дело дошло до получения данных через отправку форм и тому подобное, мы не могли реально приспособить наши ViewModels к концепции ModelBinding. Основная причина заключается в том, что обращение к браузеру и обратно часто связано с потерей данных.

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

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

Прежде чем мы это осознали, мы изо всех сил пытались реализовать собственные ModelBinders, которые могли бы реконструировать полный объект домена или ViewModel из опубликованных данных, но теперь у нас есть отдельные PostModels , которые моделируют то, как мы получаем данные.

Мы используем абстрактные картографы и сервисы для преобразования PostModel в объект домена - а затем, возможно, обратно в ViewModel, если необходимо.

4
ответ дан 13 December 2019 в 19:28
поделиться
Другие вопросы по тегам:

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