2

Или они должны быть в верхнем слое (клиентский интерфейс)? При использовании луковой архитектуры (ASP.Net MVC) следует поместить мои модели просмотра со всеми моими объектами домена в ядре. Как на картинке ниже?Должны ли мои модели просмотра быть объектами моего домена в ядре в архитектуре лука?

Мой вопрос: если да, то когда я передаю модель представления из моей службы моему клиенту, это не клиентский (верхний слой), зависящий от первого слоя, который находится на двух уровнях, и не будет сломать всю зависимость с каждым слоем, только разговаривая со слоем под ним?

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

public class YogaSpaceListViewModel 
{ 
    // YogaSpaceResults is in the domain layer two layers down 
    public IPagedList<YogaSpaceResults> YogaSpaces { get; set; } 

    public string LocationResults { get; set; } 
} 


// this is in the domain layer with all my other entities 
// this is being filled by entity framework in the DAL, which I'm calling from the service layer. 
public class YogaSpaceResults 
{ 
    public string Title { get; set; } 
    public string Summary { get; set; } 
    public DateTime Date { get; set; } 
    public DbGeography LocationPoints { get; set; } 
} 

enter image description here

+1

IMHO, посмотреть модель принадлежит к виду. Каждый пользовательский интерфейс будет иметь другой набор моделей просмотра. Иногда они могут быть похожими на модель домена, но в то время как модель домена представляет собой концепцию, модель представления - это просто DTO для пользовательского интерфейса. –

ответ

0

Он работает снаружи внутрь так, клиент знает об услугах не ViceVersa, Услуга знает о домене модели не семафор.

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

+0

Хорошо, это предположение, которое я сделаю также, исходя из вашего ответа и этой ссылки http://stackoverflow.com/questions/15531846/what-is-the-best-way-to-build-view-model. НО, как насчет модели представления, в которой есть объект домена? Код, вставленный выше. Теперь мой слой приложения (верхний слой) должен ссылаться на доменный слой, который находится на двух уровнях вниз. Это нормально делать или я могу получить доступ к слою непосредственно под мной? – user1186050

+0

Нет, ** Просмотр ** (подсказка !!) Модель относится к пользовательскому интерфейсу. Уровень приложения, который имеет смысл только при обновлении модели (не для запросов), знает о результате операции, который _can_ используется в качестве модели представления, или может быть базой для модели представления, и это задача контроллера. – MikeSW

+0

@ user1186050 Ваша модель просмотра не должна содержать объект домена. Если это так, либо плохой дизайн, либо у вас есть приложение CRUD, и все гораздо проще. – MikeSW

1

Основываясь на обновленном сообщении, вы в основном задаете вопрос о сценарии запроса. Прежде всего, вы должны четко указать, какую операцию вы выполняете: команду (модель обновления) или запрос (прочитанная модель). Каждый случай имеет свою специфику и может быть оптимизирован в поддерживаемой форме.

В этом конкретном случае запрос очень прост: контроллер должен вызывать службу запросов (aka обработчик запросов), аналогичную службе приложения, но для запросов, которая будет получать данные от сохранения в желаемом форма. Обратите внимание, что в слое DDD/CQRS наложение вторично к вертикальной нарезке aka компонентов. Это означает, что ваша настойчивость знает о вашей модели представления, и обработчик запроса возвращает модель представления непосредственно из db, нет субъекта домена.

В двух словах, для запросов, пользовательский интерфейс непосредственно связан с сохранением, пропуская домен.

Смежные вопросы