Model - View-Controller a.k.a. Model 2
-
Upload
aladdin-reese -
Category
Documents
-
view
81 -
download
8
description
Transcript of Model - View-Controller a.k.a. Model 2
ModelModel--View-ControllerView-Controllera.k.a. Model 2a.k.a. Model 2
Стефан Кирязов Стефан Кирязов MCAD.NETMCAD.NETVereo TechnologiesVereo TechnologiesStefan.Kiryazov[at]gmail[dot]comStefan.Kiryazov[at]gmail[dot]com
www.devbg.org/patternscourse/
Design patterns Design patterns in C#in C#
СъдържаниеСъдържание
• Enterprise PatternsEnterprise Patterns• Web PresentationWeb Presentation• Model-View-ControllerModel-View-Controller• Структура на шаблонаСтруктура на шаблона• ВзаимодействияВзаимодействия• Свързани шаблониСвързани шаблони• РеализацияРеализация
Enterprise patternsEnterprise patterns
• Утвърдени решения на повтарящи се Утвърдени решения на повтарящи се проблеми в софтуерния дизайнпроблеми в софтуерния дизайн
• Утвърдени решения за разделяне на Утвърдени решения за разделяне на приложенията на слоеве и структуриране приложенията на слоеве и структуриране на взаимодействията в и между тяхна взаимодействията в и между тях
• Необятно, недобре дефинирано множествоНеобятно, недобре дефинирано множество• Martin FowlerMartin Fowler и “ и “Patterns of Enterprise Patterns of Enterprise
Application ArchitectureApplication Architecture””
Enterprise patternsEnterprise patterns
• Непълен списък от възможни категории шаблони:• Data source• Domain logic• Presentation• Integration• Concurrency• Session state
Web presentationWeb presentation• Особености, налагани от HTTP и
Request-Response модела• Еволюция от статични към динамични
уеб страници• Популярни шаблони• Model-View-Controller (MVC)• Page controller• Front controller• Template view• Transform view• Application controller
Model-View-ControllerModel-View-Controller
• Шаблон, познат ни от дълбока древност, формулиран за пръв път от Trygve H. R. Reenskaug
• Един от най-често използваните шаблони и до днес
• Един от най-често използваните ПОГРЕШНО шаблони
• Задава основоположна концепция за разделение на ролите в потребителския интерфейс, особено за уеб приложенията
Структура на шаблонаСтруктура на шаблона
• Model – логическо представяне на данните
• View – визуализация• Controller – обработка на действия на
потребителя
ВзаимодействияВзаимодействия
В частност за уеб приложения
ВзаимодействияВзаимодействия
UI = View + Controller
ВзаимодействияВзаимодействия
• Разделяне на представянето от модела (View / Model)• Двете изискват различни познания при
разработка, различни библиотеки и т.н.
• Лесно създаване на различни представяния на едни и същи данни
• По-лесно тестване за валидност на бизнес правилата, когато се тестват невизуални компоненти
• Независимост на модела от представянето
ВзаимодействияВзаимодействия
• Разделяне на представянето и контролера (View / Controller)• В много библиотеки има частична
реализация на MVC, без ясно разделение между представяне и контролер
• Представяне и контролер в ASP.NET• Използване на различни контролери в
съчетание с едно представяне
Свързани шаблониСвързани шаблони
Page controllerPage controller
• Специализиран за уебСпециализиран за уеб• Създаване на логически уеб странициСъздаване на логически уеб страници• Елегантно решение за задаване на Елегантно решение за задаване на
съответствие между съответствие между URI URI и представянеи представяне• Реализиран в Реализиран в ASP.NETASP.NET• Възможност за реализация на Възможност за реализация на JavaJava
Свързани шаблониСвързани шаблони
Template viewTemplate view
• Специализиран за уебСпециализиран за уеб• Създаване на динамични страници по Създаване на динамични страници по
същият начин както статични, като същият начин както статични, като вместо динамично съдържание се вместо динамично съдържание се вмъкват специални таговевмъкват специални тагове
• Избягва се нуждата от генериране на Избягва се нуждата от генериране на HTML HTML с конкатенация на стринговес конкатенация на стрингове
Свързани шаблониСвързани шаблониPage controller + Template viewPage controller + Template view• Сървърни странициСървърни страници• Обединяване на Обединяване на view view и и controllercontroller• Използва се в Използва се в ASPASP• Смесване на презентационен код с Смесване на презентационен код с
обработка на заявкиобработка на заявки• Извеждане на обработката извън Извеждане на обработката извън
сървърната страница с помощен классървърната страница с помощен клас• JavaJava – обработка на заявките в – обработка на заявките в JSPJSP• .NET –.NET –извършва се от платоформатаизвършва се от платоформата
Свързани шаблониСвързани шаблониPage controller + Template viewPage controller + Template view• Контролер – Контролер – HTTP HTTP хендлър в отделен хендлър в отделен
класклас• Java – Servlet Java – Servlet контролерконтролер
• Codebehind Codebehind в в ASP.NETASP.NET• Codebehind Codebehind класа може да работи като класа може да работи като
контролерконтролер• Няма ясно разделение между Няма ясно разделение между view view и и
controller, controller, тъй като сървърната тъй като сървърната страница наследява от страница наследява от codebehindcodebehind-а-а
Свързани шаблониСвързани шаблони
Front controllerFront controller
• Централизирана обра-Централизирана обра-ботка на всички заявки на едно мястоботка на всички заявки на едно място
• Избягва се повтарянето на код за Избягва се повтарянето на код за securitysecurity проверки, локализация и др.проверки, локализация и др.
• Може да енкапсулира навигацията в сайтаМоже да енкапсулира навигацията в сайта
Свързани шаблониСвързани шаблониPage controller Page controller илиили Front controller ? Front controller ?• Не са напълно взаимоизключващи сеНе са напълно взаимоизключващи се• Page controller Page controller е по-удобен за прости е по-удобен за прости
случаислучаи• Front controller Front controller е подходящ, когато има е подходящ, когато има
сложна навигациясложна навигация• Front controller Front controller допуска допуска runtime runtime
настройване и разширяваненастройване и разширяване• Front controller Front controller може да улесни може да улесни
конфигурирането на сървъраконфигурирането на сървъра
Свързани шаблониСвързани шаблони
Transform viewTransform view
• Конвертиране на данни от модела към Конвертиране на данни от модела към HTMLHTML• Могат да се използват всякакви езици, но най-Могат да се използват всякакви езици, но най-
популярното средство е популярното средство е XSLTXSLT• Улеснява тестването – може да се избегне Улеснява тестването – може да се избегне
употребата на уеб сървърупотребата на уеб сървър• Може да се изнесе при клиентаМоже да се изнесе при клиента• Минимална възможност за вмъкване на Минимална възможност за вмъкване на
непрезентационен код във непрезентационен код във View-View-тото
РеализацияРеализация
• JavaJava• Struts FrameworkStruts Framework• Java Server FacesJava Server Faces
• .NET.NET• Maverick.NETMaverick.NET• User Interface Process Application BlockUser Interface Process Application Block
• Други платформиДруги платформи
РеализацияРеализация
• User Interface Process Application BlockUser Interface Process Application Block• Част от Част от Microsoft Enterprise LibraryMicrosoft Enterprise Library• Ясно разграничение между Ясно разграничение между
презентационен, навигационен и презентационен, навигационен и state state management management кодкод
• Декларативна навигацияДекларативна навигация• Безпроблемна интеграция сБезпроблемна интеграция с другидруги
application blocksapplication blocks• Унифициран подход към Унифициран подход към UI UI на уеб и на уеб и
декстоп приложениядекстоп приложения
Шаблон Шаблон Model-View-ControllerModel-View-Controller
Въпроси?Въпроси?
• Martin FowlerMartin Fowler, , Patterns of Enterprise Patterns of Enterprise Application ArchitectureApplication Architecture, , AddisonAddison--WesleyWesley, , 2002, 2002, ISBN ISBN 03211274200321127420
• WikipediaWikipediahttp://http://en.wikipedia.orgen.wikipedia.org//
• Microsoft patterns and practicesMicrosoft patterns and practices
http://msdn.microsoft.com/practices/guidetyphttp://msdn.microsoft.com/practices/guidetype/AppBlocks/e/AppBlocks/
• Code project, Hello UIPABCode project, Hello UIPABhttp://http://www.codeproject.com/csharp/hellouipab.aspwww.codeproject.com/csharp/hellouipab.asp
Използвана литератураИзползвана литература