Чтобы повторить Dima - вы можете снова сопоставить свои классы DTO с пользовательскими классами ViewModel
, специально предназначенными для просмотра (в противном случае вам может понадобиться использовать ViewBag
и т. Д., Чтобы добавить дополнительные данные в представление).
Также для подтверждения того, что «M» MVC представляет собой весь задний конец системы (DAL, BLL, Service Layer, DTO, Entities и т. Д.). Обычно мы удаляем папку Model в проектах MVC asp.net, так как другие слои находятся в отдельных сборках и на которые ссылаются/вводятся. Я предполагаю, что ваш внешний интерфейс MVC является «основным» интерфейсом для вашей системы (т. Е. Одна и та же команда разрабатывает внешний интерфейс MVC и задний конец).
Одна спорная точка - это уровень обслуживания - есть как минимум следующие 2 варианта.
- Вы можете рассматривать слой сервиса для только потребителей «внешний» системы, и разрешить контроллеры непосредственно взаимодействовать с УСК, или даже (стиль CQRS) непосредственно с DAL/Repository для запросов (т.е. Service Layer = разомкнутый интерфейс интерфейсов интеграции). (Но ваш собственный внешний интерфейс Ajax вызывает и т. Д. Должен вызывать методы MVC-контроллера, а не сервисный уровень IMO)
- Примите более традиционный строгий многоуровневый подход и рассмотрите уровень обслуживания как шлюз для вашего бизнес-уровня (т. Е. Ваш MVC-фронт isn ' t особый потребитель услуг вообще и должен пройти через сервисный уровень).
В варианте 1 вам может потребоваться дублировать службы в контроллере (безопасность, границы транзакций, ведение журнала и т. Д.). Как правило, диспетчеру потребуется эта проблема.
С вариантом 2, например. если вы используете WCF, вы должны попытаться избежать дополнительных сетевых (и сериализации/десериализации), если это возможно. Поэтому, если вы обнаружите, что вы можете развернуть свой внешний интерфейс и уровни обслуживания на одном физическом сервере, вы можете, например, сконфигурировать IoC (или classfactory), чтобы вставлять ваши экземпляры контрактов на обслуживание WCF прямо в ваш контроллер (т. Е. все еще проходят через уровень обслуживания через определенные контракты WCF, но без накладных расходов).
Также с вариантом 2, если у вас есть другие системы, которые используют ваши услуги (кроме вашего собственного интерфейса), может быть целесообразным формализовать ваш интерфейс, например. дополнительным фасадом/картографированием для внешних потребителей. В противном случае, каждый раз, когда вы добавляете новое свойство или метод в службу WCF для своего собственного интерфейса, вы нарушаете контракт внешних потребителей. WCF MessageContract
s полезны для внешних системных интерфейсов, поскольку у вас есть более тонкий контроль над форматами сообщений.
Звучит прямо на меня. – Craig
Крейг! = Крейг. –
Ничего себе, что смутил меня .. lol. –