Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Patterns2015

.pdf
Скачиваний:
10
Добавлен:
14.02.2015
Размер:
42.45 Mб
Скачать

Линияжизни MVC

ПолныйциклработыMVC

1.Приинициализпредстпользоваоновленияцииобращакмодтелелитсям устанавливаесоотекущимветссоствиисяо.яниемдели

2.Пользовательнажимакнопку.Представлениеотправляетсоответствующую комаконтроллеруду

3.Контроллеринтерпретирукомандуиз еняодель. ет

4.Представлрегистрируетзмоделинвсоответениеновымствииоянием модели

101

Задача

 

Посистемутроитьуправлениякондиционером.Естьдве, которыхасоли

 

отображаетсятекущаятемпература.

Консольможетпередупрсигналтьвляющий:

Независимооттекущейтемпервыдсигналповтурыеттемшениенапятьературы

 

градусов,

 

Взависимоттемпоеруправляющийстидеттурысигналувеличитьуменьшить

 

темпнасеграмь. тдусовру

 

Решение

 

Управляющийсигналпередамодчерезодинизлитсядвухконтроллеров:

 

- Контпеупролледасигналевляющмоделртбезмененияй

 

- Контроллерумножаетуправляющийсигнал2перемодели. ает

 

Кондицивсегдавыпуправляющееонерлняетвоздействиесообща т

представлениямоб

изменениях.

 

Модель

 

classкондиционерModel{ // private:

View * view[MAXVIEW];какнаблюдатели // View int viewCount;

int temperature; // температура в помещении

public:

102

Model() { viewCount = 0; temperature = 0; } ~Model(){}

void update();

void attache(View *v);

void modelCommandPlus(int data) {temperature += data; update();} void modelCommandMinus(int data) temperature -= data; update();}

};

Представление

classинтерфейсViewпредставления{ // protected:

Controller * c;

int curTemperature; public:

View() {c = 0; } ~View(){}

virtual void attache(Controller * contr){c = contr;} virtual void show(int temperature) = 0;

virtual void edit() = 0;

};

Контроллер (1)

class Controller{ protected:

Modelуправляемая*модельmodel; //

Viewпредставление* view; //

public:

virtual void editFromView (int data) = 0; Controller(Model * m, View * v); ~Controller(){}

103

};

Controller::Controller(Model * m, View * v){ model = m;

view = v;

view -> attache(this); // подключить представление model -> attache(v);подключитьнаблюдателя//

}

Контроллер (2)

class Controller2 : Controller{ public:

//умнпоступившую2ожаеткоман дуот

//представления

void editFromView(int data) {

if (data > 0 ) model->modelCommandPlus( data*2); else model->modelCommandMinus(-data*2);

}

Controller2(Model * m, View *v):Controller( m, v){ } ~Controller2(){}

};

Представление (1)

class View1 : public View { //имееткнопкуповышениятемпературы

public:

View1(){}

~View1(){}

void show(int temperature) {

cout << "View 1: " << temperature << endl; curTemperature = temperature;

104

}

void edit() { c->editFromView(5); }

};

Представление (2)

class View2 : public View { //имеетумную" "кнопкуизмтенениямпературы

public: View2() {} ~View2(){}

void show(int temperature) {

cout << " View 2: " << temperature << endl; curTemperature = temperature;

}

void edit(){

if (curTemperature > 30 ) c->editFromView( -7); else c->editFromView( +7);

}

};

 

Main

 

int main(int argc, char *argv[])

{

Model *model = new Model();

View1 *v1 = new View1();

 

View2 *v2 = new View2();

 

Controller1 * contr1 = new

Controller1(model,v1);

Controller2 * contr2 = new Controller2(model,v2);

for (int i=0; i<7; i++) {

 

v1-> edit(); v1-> edit();

v2-> edit();

cout << endl;

 

105

}

return 0;

}

Результат

MVC – основапроектиртрехуровневойм приложенияделива

 

Уровеньпредставления

отвечаетзаотображениеданных,обеспечеобратсвязинойие

 

пользователем,сбпорльзовательскийинформации,котопе уровеедаетсяаябизнесь

-

логики.

 

 

Бизнес-уровень обеспечлогикувза првамодействиядставленияданных.ВMVC

 

бизнес-уровеньреализуетструктурумодели.

 

Уровеньданных

отвечазаполуч,передачут ние

исохранениеданныхвфайл,баз

данных,службеилиXML

 

 

106

7.2 Понятиефреймв

 

орка

 

 

 

 

Паттерн MVC относитсякархитектурнымпаттернам,.

 

 

е.определяетархитектуру

 

приложения.Вэтомслучае, реализуемысвоюсистемуненуля,лишьреализуя

 

 

 

 

необходимыеклас

сыархитектурногопаттерна.

 

 

 

 

Фрейморк (framework) – это наборужереализованныхклассовкомпонентов( ),

 

 

использованикоторыхреализуетсяготовоеприложения,путем

 

 

следованияопределенным

интерфейсам.

 

 

 

 

 

 

Важноеотличиебиблиотекиклассов

 

библиотекукл

ассоввызываетнашкод.А

в

случаефреймво

рка нашкодявляетсявызываемым

 

.

 

 

Совремсист,включающиенныемыинт р

 

фейс,данныеивзаимодействие

с

пользователем,реализуются

припомощи

производныеотконцепцииMVCфреймво

 

рков.

Однимизпервых

 

MVC фреймворковбыл

web-фреймворк Ruby on

Rails,далее

последовалиZendSymfonyдляязыкаPHP,дляJava,Spring

 

 

ASP.NET MVC идругие ,

полностьюизменившиеподходкразраб,поднявегобъектнотке

 

 

-ориентированныйуровень

иотделпредставлениялогику

.

 

 

 

 

7.3 MVVM

 

 

 

 

 

 

 

 

 

Шаблон Model-View-ViewModel (MVVM) — модификацияшаблона

 

MVC. MVVM

ориентированнасовреалменныебибкзациил.иотекассов

 

 

 

 

 

 

 

 

MVVM, каки MVC,

исподотделенияьзуется

 

моделиот

еёпредставлен ия,что

необходимодляразработкимодиф кации

 

 

ихотдельно

друготдруга.

 

Например,

разреализуетабоработчикгику, ы

 

 

а специалистпоUI

-

пользовательскийинтерфейс

.

MVVM используется вместоклассического

MVC втехслучаях,когда

 

вфреймворке ,

которыйегореализует

 

(например, WPF,

Cocoa), используетсяконц

епцияdata

-binding-аили

привязкиданных

.

 

 

 

 

 

 

 

 

Концепция привязкиданных

позволяет связыватьданныевизуальнымиэлементами

 

 

 

обестороны.

Этооченьудоб,ведьнамнеадовэтслучаеустамзнавливатьчения

 

 

 

 

 

 

элем,следитьзаизменениемнтов

 

данныхвкомп

 

онентеиобновмод,следитьзаятьль

 

 

 

изменениеммоделиобнкомвлять.Дпостаточнопростоненты

 

 

 

 

 

“прибиндить”

некоторое

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

 

 

 

 

 

 

 

Прииспользованиитакого

 

приеприменениеаодели

 

 

MVC

становится

нецелесообразным из-затого,чтопривязкаданныхпредставлениюнапрямуюне

 

 

 

 

 

 

укладываетсяконцепцию

 

MVC.

 

 

 

 

 

 

 

Паттерн MVVM состоитизтрехчастей

:

 

 

 

 

 

 

107

Модель (Model) представлясобойданныет

иоперациипоихбработке.

 

Представление(

View) — это интерфейс пользователя,тоестьо,кноит.дпки

.

 

Представление

подписываетсянасобытия

изменениясвойствиликоманд,

 

 

предоставМодепредставления.ьюяемых

 

Вслучае,

есливМодпрелидставления

 

 

меняется какое-либосв,тоонайстоповсподпиещаетх

 

 

счикобэт,иомв

 

 

Представление запрашиваетизмененное

значениесвойстваизМодпрелидставления.

 

 

Вслучае,еслипользоввоздействуетнкакойтель

 

 

-либоэлементинтерфейса

итем

 

образомменяетданные

 

,Представлениевызываетсоответствующуюкоманду,

 

 

 

 

предоставленную Модельюпредставления

дляобновлмоделиня

.

 

Модпредставленияль(

ViewModel) этоиабстракция

 

Представления,

иобе ртка

 

данныхизМодели,котп рыедлежат

 

 

привязке.

Тоесть

онасодержитМодель,

 

 

котораяпреобПредстазов,такжесодвлениюнарж

 

 

 

итвсебекоманды,кото

рые

используются Представлением,чтобывлиятьнаМодель.

108

Списрекомендуемойлитературы

 

 

 

 

 

1.

ГаммаЭ.Хел,

мР.Джонсон, Р.Влиссидес, .

Приемыобъектно

-ориентированного

 

проекти.Паттерныроектированияя.

— С:П,итерб2015

 

.

 

2.

Э.Фримен,К.Сьерра,Б.Бейтс

. Паттерныпроектирования

— С:П,итерб2011

.

3.

Р.Мартин.Чистыйкод.Создрефакторинге,аниализ

 

— С:П,итерб2010

.

4.Craig Larman. Applyin Craig Larman g UML and Patterns: An Introduction to ObjectOriented Analysis and Design and Iterative Development (3rd Edition) Hardcover – October 30, 2004.

109

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]