Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемivanovaon.susu.ru
1 1 Паттерны проектирования MVC, MVP, MVVM
2 2 Обзор Cхема использования нескольких шаблонов проектирования, с помощью которых модель данных приложения, пользовательский интерфейс и взаимодействие с пользователем разделены на три отдельных компонента. Cхема использования нескольких шаблонов проектирования, с помощью которых модель данных приложения, пользовательский интерфейс и взаимодействие с пользователем разделены на три отдельных компонента. Концепция разработана в 1979 году для языка Smalltalk Концепция разработана в 1979 году для языка Smalltalk
3 3 Пассивная модель Passive Model (пассивная модель) - Модель не имеет вообще никаких способов воздействовать на Представление или Контроллер и только используется ими в качестве источника данных для отображения. Все изменения модели отслеживаются Контроллером и он же отвечает за перерисовку Представления, если это необходимо. Passive Model (пассивная модель) - Модель не имеет вообще никаких способов воздействовать на Представление или Контроллер и только используется ими в качестве источника данных для отображения. Все изменения модели отслеживаются Контроллером и он же отвечает за перерисовку Представления, если это необходимо.
4 4 Активная модель MVC Active Model (активная модель) - Модель имеет возможность оповестить Представление о том, что в ней произошли некие изменения, и Представление может эти изменения отобразить. Модель просто бросает сообщение, а Представления, которые заинтересованы в оповещении, подписываются на эти сообщения, что позволяет сохранить независимость Модели как от Контроллера так и от Представления, не нарушая тем самым основного свойства паттерна.
5 5 View представление, пользовательский интерфейс, View представление, пользовательский интерфейс, Model - модель, бизнес логика Model - модель, бизнес логика Controller - контроллер, содержит логику на изменение модели при определенных действиях Controller - контроллер, содержит логику на изменение модели при определенных действиях MVC
6 6 Реализация MVC в качестве GUI framework Cocoa framework Cocoa framework Java Swing Java Swing Qt4 Qt4 GTK+ GTK+
7 7 Реализация MVC как web framework Java – JSF, Oracle App Framework, Play Framework Java – JSF, Oracle App Framework, Play Framework C# - ASP.NET MVC Framework, PureMVC C# - ASP.NET MVC Framework, PureMVC Ruby – Ruby on Rails Ruby – Ruby on Rails......
8 8 package springmvc.model; package springmvc.model; public class Brand { public class Brand { private Long id; private Long id; private String name; private String name; private String country; private String country; public String getCountry() { public String getCountry() { return country; return country; } public void setCountry(String country) { public void setCountry(String country) { this.country = country; this.country = country; } Brand.java
9 9 Brand.java public void setCountry(String country) { public void setCountry(String country) { this.country = country; this.country = country; } } public Long getId() { public Long getId() { return id; return id; } } public void setId(Long id) { public void setId(Long id) { this.id = id; this.id = id; } } public String getName() { public String getName() { return name; return name; } } public void setName(String name) { public void setName(String name) { this.name = name; this.name = name; } } }
10 Car.java package springmvc.model; package springmvc.model; import java.math.BigDecimal; import java.math.BigDecimal; public class Car { public class Car { private Long id; private Long id; private Brand brand; private Brand brand; private String model; private String model; private BigDecimal price; private BigDecimal price; public Long getId() { public Long getId() { return id; return id; } }
11 Car.java public void setId(Long id) { public void setId(Long id) { this.id = id; this.id = id; } } public Brand getBrand() { public Brand getBrand() { return brand; return brand; } } public void setBrand(Brand brand) { public void setBrand(Brand brand) { this.brand = brand; this.brand = brand; } } public String getModel() { public String getModel() { return model; return model; } } }
12 CarListController.java package springmvc.web; package springmvc.web; import springmvc.service.CarManager; import springmvc.service.CarManager; public class CarListController implements Controller { public class CarListController implements Controller { public ModelAndView handleRequest(HttpServletRequest arg0,HttpServletResponse arg1) throws Exception { public ModelAndView handleRequest(HttpServletRequest arg0,HttpServletResponse arg1) throws Exception { CarManager carManager = new CarManager(); CarManager carManager = new CarManager(); ModelAndView modelAndView = new ModelAndView("carList"); ModelAndView modelAndView = new ModelAndView("carList"); modelAndView.addObject("carList", carManager.getCarList()); modelAndView.addObject("carList", carManager.getCarList()); return modelAndView; return modelAndView; } } }
13 CarList.jsp Car List Car List ${car.brand.name} ${car.model}: ${car.price} ${car.brand.name} ${car.model}: ${car.price}
14 Отображение страницы
15 Model-view-presenter Разработан в начале 90-х годов в проекте Taligent. Разработан в начале 90-х годов в проекте Taligent. Паттерн был перенесен в JAVA Mike Potel. Паттерн был перенесен в JAVA Mike Potel. В 2006 году Microsoft начала включать MVP в свои примеры и документацию для программирования UI. В 2006 году Microsoft начала включать MVP в свои примеры и документацию для программирования UI.
16 Model-view-presenter Контроллер (Presenter) дает знать представлению об изменениях. Контроллер (Presenter) дает знать представлению об изменениях. Данный подход позволяет создавать абстракцию представления Данный подход позволяет создавать абстракцию представления
17 Реализации MVP Google Web Toolkit Google Web Toolkit ASP.NET Web Forms Model-View-Presenter (MVP) ASP.NET Web Forms Model-View-Presenter (MVP) Java Swing/AWT Java Swing/AWT Silverlight Silverlight …
18 Пример IView public interface IView public interface IView { { /// /// /// Вывод градусов Фаренгейта /// Вывод градусов Фаренгейта /// /// void SetFarenheit(double value); void SetFarenheit(double value); /// Ввод нового значения градусов /// Ввод нового значения градусов /// /// double InputDegree { get; } double InputDegree { get; } /// /// /// Событие ввода значения по Фаренгейту /// Событие ввода значения по Фаренгейту /// /// event EventHandler SetFarenheit; event EventHandler SetFarenheit;
19 Пример Presenter public class Presenter public class Presenter { { private Model _model = new Model(); private Model _model = new Model(); private IView _view; private IView _view; /// /// /// В конструтор передается конкретный экземпляр представления /// В конструтор передается конкретный экземпляр представления /// и происходит подписка на все нужные события. /// и происходит подписка на все нужные события. /// /// public Presenter(IView view) public Presenter(IView view) { { _view = view; _view = view; _view.SetCelsius += new EventHandler (OnSetCelsius); _view.SetCelsius += new EventHandler (OnSetCelsius); _view.SetFarenheit += new EventHandler (OnSetFarenheit); _view.SetFarenheit += new EventHandler (OnSetFarenheit); RefreshView(); RefreshView(); } }
20 Пример Presenter /// /// /// Обработка события, установка нового значения градусов по Фаренгейту /// Обработка события, установка нового значения градусов по Фаренгейту /// /// private void OnSetFarenheit(object sender, EventArgs e) private void OnSetFarenheit(object sender, EventArgs e) { { _model.valueFahrenheit = _view.InputDegree; _model.valueFahrenheit = _view.InputDegree; RefreshView(); RefreshView(); } } /// /// /// Обновление Представления новыми значениями модели. /// Обновление Представления новыми значениями модели. /// По сути Binding (привязка) значений модели к Представлению. /// По сути Binding (привязка) значений модели к Представлению. /// /// private void RefreshView() private void RefreshView() { { _view.SetCelsius(_model.valueCelsius); _view.SetCelsius(_model.valueCelsius); _view.SetFarenheit(_model.valueFahrenheit); _view.SetFarenheit(_model.valueFahrenheit); } }
21 Пример View /// /// /// Обновление Представления новыми значениями модели. /// Обновление Представления новыми значениями модели. /// По сути Binding (привязка) значений модели к Представлению. /// По сути Binding (привязка) значений модели к Представлению. /// /// private void RefreshView() private void RefreshView() { { _view.SetCelsius(_model.valueCelsius); _view.SetCelsius(_model.valueCelsius); _view.SetFarenheit(_model.valueFahrenheit); _view.SetFarenheit(_model.valueFahrenheit); } } /// /// /// Ввод нового значения градусов /// Ввод нового значения градусов /// /// public double InputDegree public double InputDegree { { get { return Convert.ToDouble(_inputBox.Text); } get { return Convert.ToDouble(_inputBox.Text); } } }
22 Отличия от MVC Более слабая связь с моделью. Presenter отвечает за связывание модели и представления Более слабая связь с моделью. Presenter отвечает за связывание модели и представления Более легкая организация тестирования, т.к. взаимодействие с представлением идет через интерфейс Более легкая организация тестирования, т.к. взаимодействие с представлением идет через интерфейс
23 Литература MVC: XEROX PARC (1979) by Trygve Reenskaug, MVC: XEROX PARC (1979) by Trygve Reenskaug, Spring MVC Fast Tutorial Spring MVC Fast Tutorial Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования. Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования. И. Бодягин. Model-View-Presenter и сопутствующие паттерны. И. Бодягин. Model-View-Presenter и сопутствующие паттерны.
24 Вопросы Паттерн проектирования MVVM Паттерн проектирования MVVM Строение паттерна MVP Строение паттерна MVP Особенности MVC Особенности MVC
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.