ASP.NET MVC - Модел в уеб проект

Аз съм нов в ASP.NET MVC и наследих проект, който използва технологията.

Такъв уеб проект съдържа три папки: Views, Controllers и Model. Доколкото разбирам, моделът всъщност съдържа вашия домейн/бизнес логика и се извиква от вашите контролери. Самите контролери действат като делегатори между изгледи и модел.

Сега, в типична многопластова архитектура, не трябва да има препратки към проекта Web/UI в нито един проект.

Намирам това за доста объркващо:
-> Потребителският интерфейс съдържа модела, който е - в един идеален свят - базиран на принципите на "Дизайн, управляван от домейн".
-> Слоевете над потребителския интерфейс (Услуги и DataAccess) не може да има препратка към потребителския интерфейс

Как можете да напишете ефективни услуги и слоеве за достъп до данни, ако те не познават вашия модел?

Какво ми липсва тук? Web.Model различен ли е от „DDD“ и трябва ли все пак да имам отделен BL проект? Ако случаят е такъв, тогава какво трябва да съдържа Web.Model?


person Laoujin    schedule 07.02.2013    source източник


Отговори (3)


Гледам на модела като на концепция. Можете да имате напълно отделен проект, съдържащ вашия домейн (вашите обекти, вашите услуги и т.н.) и да го посочите във вашия "UI" проект. В този сценарий това ще бъде вашият "Модел". Това е, което обикновено правя, в моята папка Models пазя "ViewModels", който използвам за Binding/Validation (за UI). Например, ако имам служител, но не е необходимо да искам да използвам всички негови свойства (или за този въпрос различни свойства), ще създам EmployeeViewModel ще го коригирам по начина, по който искам, ще добавя валидиране (ако е необходимо) и ще го предам на моя View.

Това в никакъв случай не е „правилният начин“/„единственият начин“, но работеше за мен в миналото и реших да споделя (също така, аз съм доста ужасен в обясненията, така че наистина се надявам тази публикация има смисъл, в случай че няма или са необходими разяснения - моля, уведомете ме).

person Dimitar Dimitrov    schedule 07.02.2013

Не е задължително вашият модел да е в същия проект. Можете, разбира се, да ги имате в различни слоеве.

Ето как обикновено настройвам проектите си

1) UI проект - Това е проект от тип MVC уеб приложение, където ще имам моите контролери и техните изгледи и други неща, свързани с UI

2) Бизнес субекти – Това ще бъде проект от тип библиотека от класове, където ще дефинирам обектите на моя домейн (Напр.: Клиент). Това най-вече изглежда подобно на това как изглежда моята DB схема. Това обикновено са само POCO, които представляват моя модален домейн (използвам това за генериране на база данни CodeFirst).

3) Достъп до данни - Това ще бъде друг проект от тип библиотека с класове, който има класове за достъп до данни. Обикновено моят клас/интерфейси на хранилище, моят клас DBContext и други класове за достъп до данни ще бъдат в този проект.

4) Тестове - Единични тестове за проекта

въведете описание на изображението тук

Проектът Business Entities е добавен като препратка към Data Access Project, така че да мога да използвам тези класове в моя код за достъп до данни.

Бизнес субекти и проекти за достъп до данни се добавят като препратки в UI Project. Бих извикал методите за достъп до данни от моите контролери/класове за услуги.

Можете също така да добавите логически слой за услуги/бизнес между вашия контролер и слоя за достъп до данни, ако е необходимо.

Имам няколко класа ViewModel също в папката ViewModels на моя UI проект. Използвам това за някои екрани, където трябва да покажа данни от множество обекти на домейн. Имам клас за картографиране/услуга, който картографира обекта на домейна, за да прегледа обекта на модела. Ако вашият проект е bifg, можете да запазите това като отделен проект под същото решение

person Shyju    schedule 07.02.2013

  • Изгледите съдържат вашите HTML оформления
  • Контролерите извършват тежката работа по получаване на данни от моделите или самите модели и предаването им на Views.
  • Моделите се използват за извършване на действия за вашия BL или за извличане на данни.

Съвет: Можете да използвате EntityFramework (препоръчвам го, защото е лесно да започнете с него), за да извлечете вашите данни и е изключително лесно да се настрои, като по този начин елиминира вашия DAL и ви спестява време да пишете всичко сами.

Услуги: можете да имате контролери, които връщат XML/JSON (друг формат?), като конвертирате данните, които сте получили от DB, в XML/JSON и връщате това вместо изглед. Разгледайте MVC 4 WebApi за повече подробности, имайте предвид, че можете да правите почти същото нещо и с mvc 3

Също така вижте сайта asp.net/mvc за уроци, за да започнете, те са наистина полезни.

person Nikola Sivkov    schedule 07.02.2013