MVC приложение. Как се вписва многослойната архитектура?

Нов съм в концепцията за MVC и многослойната уеб архитектура. Разработвам PHP приложение и използвам една от наличните MVC рамки. Въпросът ми е следния:

Доколкото разбирам, MVC сам по себе си не се счита за многослойна архитектура. Мога да разбера как използването само на MVC е стъпка напред от приемането на неструктуриран подход, но обмислях как една проста 3-степенна архитектура ще се впише? Ще се намира ли MVC в презентационния слой? Какви са предимствата на добавянето на многостепенен подход? От това, което разбирам, само с MVC няма изрични обекти с данни, отговорни за извличане на данни от базата данни и това обикновено се натъпква в модела. По същия начин бизнес логиката, която в 3-степенна архитектура ще се намира в "бизнес слой" (или както искате да го наречете), може да бъде натъпкана в контролера.

Правилно ли е разбирането ми? Знам, че зададох много въпроси, но бих искал да ви чуя да обсъждате как сте включили n-tier архитектура във вашата MVC рамка (PHP или друго), тъй като предполагам, че двете не са взаимно изключващи се. Благодаря!


person oym    schedule 16.07.2009    source източник
comment
Възможни дубликати: stackoverflow.com/questions/899803/, stackoverflow.com/questions/2843311 /, stackoverflow.com/questions/14451444 /   -  person pgpb.padilla    schedule 13.08.2013


Отговори (2)


M) M е вашият модел. Това обикновено живее във вашия бизнес слой или слоя точно зад вашия презентационен слой. Много хора обаче не харесват презентационния слой да има каквито и да е познания за бизнес слоя и затова те допълнително го абстрахират, като имат това, което се нарича ViewModel. Това често са DTO (обекти за прехвърляне на данни), които свободно се свързват с вашия модел на домейн. За мен (.net човек) има инструменти като AutoMapper за преобразуване от Domain Model към View Model.

V) V е вашето виждане. Изгледът е вашият презентационен слой. Това е действителният HTML или PHP код, който потребителят директно докосва и взаимодейства с него. Гледката трябва да е възможно най-светла (което означава, че няма логика, ако е възможно). Опитайте се да държите всякакви сценарии на if/then type извън изгледа и се придържайте само към показване и събиране на данни. Представете ViewModel на вашите уеб дизайнери, така че да не замърсяват вашия DomainModel.

C) C е вашият контролер. Това е много като координатор. Той взема данни от вашия изглед и се уверява, че стига до правилната задна функция/метод за обработка на тези данни. Той също така координира данните от задния край по пътя към предния край.

Концепциите за многослоен дизайн идват зад презентационния слой (където е основно MVC). Когато контролерът взема данни от изгледа и ги предава обратно към задния край, той (ако следвате DDD или управляван от домейн дизайн) ще предаде данните на услуга за приложение (клас, който координира задния край, има значение). Услугата може допълнително да избута данните в слой на хранилището (който е клас, който говори с базата данни, файловата система, уеб услугите и т.н. - всякакви инфраструктурни неща). DDD е голяма тема, но ще разберете n-tier подхода и как работи с MVC.

Докато проучвате тази тема, разгледайте IoC (инверсия на контрола), DI (инжектиране на зависимост), TDD (разработка, управлявана от тестове) и възможно най-много модели (фасада, фабрика и т.н.).

person Andrew Siemer    schedule 16.07.2009

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

person Beep beep    schedule 16.07.2009