Паттерны проектирования MVC MVP MVVM

Содержание

Слайд 2

Обзор

Cхема использования нескольких шаблонов проектирования, с помощью которых модель данных приложения, пользовательский

Обзор Cхема использования нескольких шаблонов проектирования, с помощью которых модель данных приложения,
интерфейс и взаимодействие с пользователем разделены на три отдельных компонента.
Концепция разработана в 1979 году для языка Smalltalk

Слайд 3

Пассивная модель

Passive Model (пассивная модель) - Модель не имеет вообще никаких способов

Пассивная модель Passive Model (пассивная модель) - Модель не имеет вообще никаких
воздействовать на Представление или Контроллер и только используется ими в качестве источника данных для отображения. Все изменения модели отслеживаются Контроллером и он же отвечает за перерисовку Представления, если это необходимо.

Слайд 4

Активная модель MVC

Active Model (активная модель) - Модель имеет возможность оповестить Представление

Активная модель MVC Active Model (активная модель) - Модель имеет возможность оповестить
о том, что в ней произошли некие изменения, и Представление может эти изменения отобразить. Модель просто бросает сообщение, а Представления, которые заинтересованы в оповещении, подписываются на эти сообщения, что позволяет сохранить независимость Модели как от Контроллера так и от Представления, не нарушая тем самым основного свойства паттерна.

Слайд 5

View представление, пользовательский интерфейс,
Model - модель, бизнес логика
Controller - контроллер, содержит

View представление, пользовательский интерфейс, Model - модель, бизнес логика Controller - контроллер,
логику на изменение модели при определенных действиях

MVC

Слайд 6

Реализация MVC в качестве GUI framework

Cocoa framework
Java Swing
Qt4
GTK+

Реализация MVC в качестве GUI framework Cocoa framework Java Swing Qt4 GTK+

Слайд 7

Реализация MVC как web framework

Java – JSF, Oracle App Framework, Play

Реализация MVC как web framework Java – JSF, Oracle App Framework, Play
Framework
C# - ASP.NET MVC Framework, PureMVC
Ruby – Ruby on Rails
...

Слайд 8

package springmvc.model;
public class Brand {
private Long id;
private String name;
private String country;
public String

package springmvc.model; public class Brand { private Long id; private String name;
getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}

Brand.java

Слайд 9

Brand.java

public void setCountry(String country) {
this.country = country;
}
public Long

Brand.java public void setCountry(String country) { this.country = country; } public Long
getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

Слайд 10

Car.java

package springmvc.model;
import java.math.BigDecimal;
public class Car {
private Long id;
private Brand brand;

Car.java package springmvc.model; import java.math.BigDecimal; public class Car { private Long id;
private String model;
private BigDecimal price;
public Long getId() {
return id;
}

Слайд 11

Car.java

public void setId(Long id) {
this.id = id;
}
public Brand

Car.java public void setId(Long id) { this.id = id; } public Brand
getBrand() {
return brand;
}
public void setBrand(Brand brand) {
this.brand = brand;
}
public String getModel() {
return model;
}
}

Слайд 12

CarListController.java

package springmvc.web;
import springmvc.service.CarManager;
public class CarListController implements Controller {
public ModelAndView handleRequest(HttpServletRequest arg0,HttpServletResponse arg1)

CarListController.java package springmvc.web; import springmvc.service.CarManager; public class CarListController implements Controller { public
throws Exception {
CarManager carManager = new CarManager();
ModelAndView modelAndView = new ModelAndView("carList");
modelAndView.addObject("carList", carManager.getCarList());
return modelAndView;
}
}

Слайд 13

CarList.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


Car List



CarList.jsp Car List ${car.brand.name} ${car.model}: ${car.price}
${car.brand.name} ${car.model}: ${car.price}





Слайд 14

Отображение страницы

Отображение страницы

Слайд 15

Model-view-presenter

Разработан в начале 90-х годов в проекте Taligent.
Паттерн был перенесен в

Model-view-presenter Разработан в начале 90-х годов в проекте Taligent. Паттерн был перенесен
JAVA Mike Potel.
В 2006 году Microsoft начала включать MVP в свои примеры и документацию для программирования UI.

Слайд 16

Model-view-presenter

Контроллер (Presenter) дает знать представлению об изменениях.
Данный подход позволяет создавать абстракцию

Model-view-presenter Контроллер (Presenter) дает знать представлению об изменениях. Данный подход позволяет создавать абстракцию представления
представления

Слайд 17

Реализации MVP

Google Web Toolkit
ASP.NET Web Forms Model-View-Presenter (MVP)
Java Swing/AWT
Silverlight

Реализации MVP Google Web Toolkit ASP.NET Web Forms Model-View-Presenter (MVP) Java Swing/AWT Silverlight …

Слайд 18

Пример IView

public interface IView
{
///


/// Вывод градусов Фаренгейта
///

Пример IView public interface IView { /// /// Вывод градусов Фаренгейта ///

void SetFarenheit(double value);
/// Ввод нового значения градусов
///
double InputDegree { get; }
///
/// Событие ввода значения по Фаренгейту
///

event EventHandler SetFarenheit;

Слайд 19

Пример Presenter

public class Presenter
{
private Model _model = new Model();

Пример Presenter public class Presenter { private Model _model = new Model();
private IView _view;
///
/// В конструтор передается конкретный экземпляр представления
/// и происходит подписка на все нужные события.
///
public Presenter(IView view)
{
_view = view;
_view.SetCelsius += new EventHandler(OnSetCelsius);
_view.SetFarenheit += new EventHandler(OnSetFarenheit);
RefreshView();
}

Слайд 20

Пример Presenter

///


/// Обработка события, установка нового значения градусов по

Пример Presenter /// /// Обработка события, установка нового значения градусов по Фаренгейту
Фаренгейту
///
private void OnSetFarenheit(object sender, EventArgs e)
{
_model.valueFahrenheit = _view.InputDegree;
RefreshView();
}
///
/// Обновление Представления новыми значениями модели.
/// По сути Binding (привязка) значений модели к Представлению.
///

private void RefreshView()
{
_view.SetCelsius(_model.valueCelsius);
_view.SetFarenheit(_model.valueFahrenheit);
}
}

Слайд 21

Пример View

///


/// Обновление Представления новыми значениями модели.
/// По

Пример View /// /// Обновление Представления новыми значениями модели. /// По сути
сути Binding (привязка) значений модели к Представлению.
///
private void RefreshView()
{
_view.SetCelsius(_model.valueCelsius);
_view.SetFarenheit(_model.valueFahrenheit);
}
}
///
/// Ввод нового значения градусов
///

public double InputDegree
{
get { return Convert.ToDouble(_inputBox.Text); }
}

Слайд 22

Отличия от MVC

Более слабая связь с моделью. Presenter отвечает за связывание модели

Отличия от MVC Более слабая связь с моделью. Presenter отвечает за связывание
и представления
Более легкая организация тестирования, т.к. взаимодействие с представлением идет через интерфейс

Слайд 23

Литература

MVC: XEROX PARC 1978-79 (1979) by Trygve Reenskaug, http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html
Spring MVC Fast

Литература MVC: XEROX PARC 1978-79 (1979) by Trygve Reenskaug, http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html Spring MVC
Tutorial http://maestric.com/doc/java/spring/mvc
Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования.
И. Бодягин. Model-View-Presenter и сопутствующие паттерны. http://www.rsdn.ru/article/patterns/ModelViewPresenter.xml
Имя файла: Паттерны-проектирования-MVC-MVP-MVVM.pptx
Количество просмотров: 368
Количество скачиваний: 2