MVC mit Lazarus - michael-fuchs.net file4 MVC mit Lazarus Überblick Theorie Definition Aufbau Vor-...

Post on 22-Aug-2019

229 views 0 download

Transcript of MVC mit Lazarus - michael-fuchs.net file4 MVC mit Lazarus Überblick Theorie Definition Aufbau Vor-...

MVC mit Lazarus1

MVCMVC

mit Lazarusmit Lazarus

MVCMVC

mit Lazarusmit Lazarus

www.lazarusforum.de25. - 27.07.2014 Reinheim

MVC mit Lazarus2

Überblick

MVC mit Lazarus3

Überblick● Theorie

● Definition

● Aufbau

● Vor- und Nachteile

MVC mit Lazarus4

Überblick● Theorie

● Definition

● Aufbau

● Vor- und Nachteile

● Praxis

● Beispiel-Implementierung mit Lazarus

MVC mit Lazarus5

Was ist MVC?Was ist MVC?Was ist MVC?Was ist MVC?

MVC mit Lazarus6

„Wir entwickeln unser Out-of-the-box Web 3.0

Customer-Relationship-Management-System in einem

agilen Prozess unter strenger Nutzung des MVC-

Patterns, um das Like-Value in den Social-Networks

auf einem von unseren Stakeholdern akzeptierten

Wert zu halten.“

MVC mit Lazarus7

„Wir entwickeln unser Out-of-the-box Web 3.0

Customer-Relationship-Management-System in einem

agilen Prozess unter strenger Nutzung des MVC-

Patterns, um das Like-Value in den Social-Networks

auf einem von unseren Stakeholdern akzeptierten

Wert zu halten.“Bullshit!

Bullshit!

MVC mit Lazarus8

Model-View-ControllerModel-View-Controller

MVC mit Lazarus9

Model-View-ControllerModel-View-Controller

Model-View-PresenterModel-View-Presenter

MVC mit Lazarus10

Model-View-ControllerModel-View-Controller

Model-View-PresenterModel-View-Presenter

Model-View-AdaptorModel-View-Adaptor

MVC mit Lazarus11

Model-View-ControllerModel-View-Controller

Model-View-PresenterModel-View-Presenter

Model-View-AdaptorModel-View-Adaptor

Model-View-ViewmodelModel-View-Viewmodel

MVC mit Lazarus12

Model-View-ControllerModel-View-Controller

Model-View-Presenter

Model-View-Adaptor

Model-View-Viewmodel

MVC mit Lazarus13

Model-View-Controller (MVC) ist ein Architekturmuster für GUI-Anwendungen. Es trennt die Applikation in drei Teile, die lose miteinander gekoppelt sind.

Model–View-Controller

MVC mit Lazarus14

Model

Model-View-Controller (MVC) ist ein Architekturmuster für GUI-Anwendungen. Es trennt die Applikation in drei Teile, die lose miteinander gekoppelt sind.

Model–View-Controller

MVC mit Lazarus15

Model View

Model-View-Controller (MVC) ist ein Architekturmuster für GUI-Anwendungen. Es trennt die Applikation in drei Teile, die lose miteinander gekoppelt sind.

Model–View-Controller

MVC mit Lazarus16

Model ViewController

Model-View-Controller (MVC) ist ein Architekturmuster für GUI-Anwendungen. Es trennt die Applikation in drei Teile, die lose miteinander gekoppelt sind.

Model–View-Controller

MVC mit Lazarus17

Model

MVC mit Lazarus18

ModelDas Modell enthält Klassen, die alle darzustellenden Daten repräsentieren.

MVC mit Lazarus19

Model

TAnnualResults

+ Year: Integer+ Sales: Currency+ Profit: Currency

TResults

+ CompanyId: Integer+ Results: array of TAnnualResult

Das Modell enthält Klassen, die alle darzustellenden Daten repräsentieren.

MVC mit Lazarus20

Model

TAnnualResults

+ Year: Integer+ Sales: Currency+ Profit: Currency

TResults

+ CompanyId: Integer+ Results: array of TAnnualResult

Das Modell enthält Klassen, die alle darzustellenden Daten repräsentieren.

In vielen Fällen sind im Modell auch die Klassen der Geschäftslogik und Datenpersistenz vertreten.

MVC mit Lazarus21

Model

TAnnualResults

+ Year: Integer+ Sales: Currency+ Profit: Currency

TResults

+ CompanyId: Integer+ Results: array of TAnnualResult

Das Modell enthält Klassen, die alle darzustellenden Daten repräsentieren.

In vielen Fällen sind im Modell auch die Klassen der Geschäftslogik und Datenpersistenz vertreten.

TBilanzService

+ Connect()+ Disconnect()+ GetResults(StartYear: Integer): TResults

MVC mit Lazarus22

Model

TAnnualResults

+ Year: Integer+ Sales: Currency+ Profit: Currency

TResults

+ CompanyId: Integer+ Results: array of TAnnualResult

TBilanzService

+ Connect()+ Disconnect()+ GetResults(StartYear: Integer): TResults

Das Modell enthält Klassen, die alle darzustellenden Daten repräsentieren.

In vielen Fällen sind im Modell auch alle Klassen zur Geschäftslogik und Datenpersistenz vertreten.

Datenbank

MVC mit Lazarus23

View

MVC mit Lazarus24

ViewDie Views sind für die Darstellung der Daten aus dem Modell und die Entgegennahme von Benutzerinteraktionen zuständig. Sie kennen das Model.

MVC mit Lazarus25

Umsatz Gewinn

2011 3,5 Mio EUR 210 tsd. EUR

2012 3,2 Mio. EUR 570 tsd. EUR

2013 3,8 Mio. EUR 510 tsd. EUR

2014 2,9 Mio. EUR 720 tsd. EUR

ViewDie Views sind für die Darstellung der Daten aus dem Modell und die Entgegennahme von Benutzerinteraktionen zuständig. Sie kennen das Model.

MVC mit Lazarus26

2011 2012 2013 20140

500000

1000000

1500000

2000000

2500000

3000000

3500000

4000000

Umsatz Gewinn

2011 3,5 Mio EUR 210 tsd. EUR

2012 3,2 Mio. EUR 570 tsd. EUR

2013 3,8 Mio. EUR 510 tsd. EUR

2014 2,9 Mio. EUR 720 tsd. EUR

ViewDie Views sind für die Darstellung der Daten aus dem Modell und die Entgegennahme von Benutzerinteraktionen zuständig. Sie kennen das Model.

MVC mit Lazarus27

2011 2012 2013 20140

500000

1000000

1500000

2000000

2500000

3000000

3500000

4000000

2011 2012 2013 20140

500000

1000000

1500000

2000000

2500000

3000000

3500000

4000000

Umsatz Gewinn

2011 3,5 Mio EUR 210 tsd. EUR

2012 3,2 Mio. EUR 570 tsd. EUR

2013 3,8 Mio. EUR 510 tsd. EUR

2014 2,9 Mio. EUR 720 tsd. EUR

ViewDie Views sind für die Darstellung der Daten aus dem Modell und die Entgegennahme von Benutzerinteraktionen zuständig. Sie kennen das Model.

MVC mit Lazarus28

2011 2012 2013 20140

500000

1000000

1500000

2000000

2500000

3000000

3500000

4000000

2011 2012 2013 20140

500000

1000000

1500000

2000000

2500000

3000000

3500000

4000000

Umsatz Gewinn

2011 3,5 Mio EUR 210 tsd. EUR

2012 3,2 Mio. EUR 570 tsd. EUR

2013 3,8 Mio. EUR 510 tsd. EUR

2014 2,9 Mio. EUR 720 tsd. EUR

2012 Jahr:

Umsatz:

Gewinn:

3.200.000 EUR

570.000 EUR

ViewDie Views sind für die Darstellung der Daten aus dem Modell und die Entgegennahme von Benutzerinteraktionen zuständig. Sie kennen das Model.

MVC mit Lazarus29

Controller

MVC mit Lazarus30

ControllerDie Controller verwalten die Views, reagieren auf die Benutzereingaben und fordern Daten vom Model an oder geben sie an das Model weiter.

MVC mit Lazarus31

ControllerDie Controller verwalten die Views, reagieren auf die Benutzereingaben und fordern Daten vom Model an oder geben sie an das Model weiter.

Model View

Controller Benutzer

MVC mit Lazarus32

ControllerDie Controller verwalten die Views, reagieren auf die Benutzereingaben und fordern Daten vom Model an oder geben sie an das Model weiter.

Model View

Controller Benutzer

MVC mit Lazarus33

ControllerDie Controller verwalten die Views, reagieren auf die Benutzereingaben und fordern Daten vom Model an oder geben sie an das Model weiter.

Model View

Controller Benutzer

MVC mit Lazarus34

ControllerDie Controller verwalten die Views, reagieren auf die Benutzereingaben und fordern Daten vom Model an oder geben sie an das Model weiter.

Model View

Controller Benutzer

MVC mit Lazarus35

ControllerDie Controller verwalten die Views, reagieren auf die Benutzereingaben und fordern Daten vom Model an oder geben sie an das Model weiter.

Model View

Controller Benutzer

MVC mit Lazarus36

ControllerDie Controller verwalten die Views, reagieren auf die Benutzereingaben und fordern Daten vom Model an oder geben sie an das Model weiter.

Model View

Controller Benutzer

MVC mit Lazarus37

ControllerDie Controller verwalten die Views, reagieren auf die Benutzereingaben und fordern Daten vom Model an oder geben sie an das Model weiter.

Model View

Controller Benutzer

MVC mit Lazarus38

VorteileVorteileVorteileVorteile

MVC mit Lazarus39

Austauschbarkeit

MVC mit Lazarus40

verteilte Entwicklung

MVC mit Lazarus41

Testbarkeit

MVC mit Lazarus42

wartungsfreundlich

monolithische Anwendung

MVC-Anwendung

MVC mit Lazarus43

NachteileNachteileNachteileNachteile

MVC mit Lazarus44

MVC-Anwendung

monolithische Anwendung

Entwicklungsaufwand

MVC mit Lazarus45

Komplexität der Anwendung / Entwicklungszeitraum

pro

zentu

aler

Aufw

and

Entwicklungsaufwand

MVC

monol.

MVC mit Lazarus46

Beispiel-ApplikationBeispiel-ApplikationBeispiel-ApplikationBeispiel-Applikation

MVC mit Lazarus47

Beispiel-ApplikationBeispiel-ApplikationBeispiel-ApplikationBeispiel-Applikation

wir bauen uns eine Adresslistewir bauen uns eine Adresslistewir bauen uns eine Adresslistewir bauen uns eine Adressliste

MVC mit Lazarus48

Entwicklungsphasen

MVC mit Lazarus49

Analyse

Entwicklungsphasen

MVC mit Lazarus50

Analyse

Entwicklungsphasen

Design

MVC mit Lazarus51

Analyse

Implementierung

Entwicklungsphasen

Design

MVC mit Lazarus52

Userstories

Analyse Design Implementierung

MVC mit Lazarus53

Userstories

MVC mit Lazarus54

Userstories

MVC mit Lazarus55

Userstories

#1 Liste aller Personen anzeigen

Im Hauptfenster des Programms soll eine Liste aller in der Datenbank gespeicherten Personen angezeigt werden (Daten: Name, Vorname).

MVC mit Lazarus56

Userstories

#1

MVC mit Lazarus57

Userstories

#2 Detailansicht für eine Person

Beim Klick auf den „Details“-Button soll in einem neuen Fenster alle Daten zu einer Person angezeigt werden.(Daten: Name, Vorname, Adresse, Stadt, Postleitzahl, E-Mail, Telefonnummer)

#1

MVC mit Lazarus58

Userstories

#1 #2

MVC mit Lazarus59

Userstories

#3 Person editieren

Beim Klick auf den „Bearbeiten“-Button soll in einem neuen Fenster alle Daten einer Person bearbeitet werden können.(Daten: Name, Vorname, Adresse, Stadt, Postleitzahl, E-Mail, Telefonnummer)

#1 #2

MVC mit Lazarus60

Userstories

#3#1 #2

MVC mit Lazarus61

Userstories

#3

#4 neue Person hinzufügen

Beim Klick auf den „Neu“-Button soll einem neuen Fenster die Daten zu einer neuen Person eingegeben werden können. Nach dem Klick auf Speichern soll die Person in die Datenbank geschrieben werden.

#1 #2

MVC mit Lazarus62

Userstories

#3#1 #2 #4

Analyse Design Implementierung

MVC mit Lazarus63

Analyse Design Implementierung

Datenklassen

MVC mit Lazarus64

Datenklassen

#2 Detailansicht für eine Person

Beim Klick auf den „Details“-Button soll in einem neuen Fenster alle Daten zu einer Person angezeigt werden.(Daten: Name, Vorname, Adresse, Stadt, Postleitzahl, E-Mail, Telefonnummer)

MVC mit Lazarus65

Datenklassen

#2 Detailansicht für eine Person

Beim Klick auf den „Details“-Button soll in einem neuen Fenster alle Daten zu einer Person angezeigt werden.(Daten: Name, Vorname, Adresse, Stadt, Postleitzahl, E-Mail, Telefonnummer)

TPerson

+ Id: LongInt+ Firstname: String+ Lastname: String+ Adress: String+ City: String+ Postcode: String+ Email: String+ Phone: String

MVC mit Lazarus66

Datenklassen

TPerson

+ Id: LongInt+ Firstname: String+ Lastname: String+ Adress: String+ City: String+ Postcode: String+ Email: String+ Phone: String

#1 Liste aller Personen anzeigen

Im Hauptfenster des Programms soll eine Liste aller in der Datenbank gespeicherten Personen angezeigt werden (Daten: Name, Vorname).

MVC mit Lazarus67

Datenklassen

TPerson

+ Id: LongInt+ Firstname: String+ Lastname: String+ Adress: String+ City: String+ Postcode: String+ Email: String+ Phone: String

#1 Liste aller Personen anzeigen

Im Hauptfenster des Programms soll eine Liste aller in der Datenbank gespeicherten Personen angezeigt werden (Daten: Name, Vorname).

TPersonHead

+ Id: LongInt+ Firstname: String+ Lastname: String

MVC mit Lazarus68

Datenklassen

TPerson

+ Id: LongInt+ Firstname: String+ Lastname: String+ Adress: String+ City: String+ Postcode: String+ Email: String+ Phone: String

#1 Liste aller Personen anzeigen

Im Hauptfenster des Programms soll eine Liste aller in der Datenbank gespeicherten Personen angezeigt werden (Daten: Name, Vorname).

TPersonHead

+ Id: LongInt+ Firstname: String+ Lastname: String

TObjectList

TPersonHeadList

+ Add+ Extract+ Remove+ IndexOf+ Insert+ First+ Last+ GetEnumerator+ Items

MVC mit Lazarus69

Datenklassen

TPerson

+ Adress: String+ City: String+ Postcode: String+ Email: String+ Phone: String

TPersonHead

+ Id: LongInt+ Firstname: String+ Lastname: String

TObjectList

TPersonHeadList

+ Add+ Extract+ Remove+ IndexOf+ Insert+ First+ Last+ GetEnumerator+ Items

Analyse Design Implementierung

MVC mit Lazarus70

Interfaces

MVC mit Lazarus71

#1 Liste aller Personen anzeigen

Im Hauptfenster des Programms soll eine Liste aller in der Datenbank gespeicherten Personen angezeigt werden (Daten: Name, Vorname).

Interfaces

MVC mit Lazarus72

Interfaces

<<interface>>IMainView

+ BindPersonHeads(List: TPersonHeadList)

#1 Liste aller Personen anzeigen

Im Hauptfenster des Programms soll eine Liste aller in der Datenbank gespeicherten Personen angezeigt werden (Daten: Name, Vorname).

MVC mit Lazarus73

Interfaces

<<interface>>IMainView

+ BindPersonHeads(List: TPersonHeadList)

#2 Detailansicht für eine Person

Beim Klick auf den „Details“-Button soll in einem neuen Fenster alle Daten zu einer Person angezeigt werden.(Daten: Name, Vorname, Adresse, Stadt, Postleitzahl, E-Mail, Telefonnummer)

MVC mit Lazarus74

Interfaces

<<interface>>IMainView

+ BindPersonHeads(List: TPersonHeadList)

<<interface>>IDetailView

+ ShowPerson(APerson: TPerson)

#2 Detailansicht für eine Person

Beim Klick auf den „Details“-Button soll in einem neuen Fenster alle Daten zu einer Person angezeigt werden.(Daten: Name, Vorname, Adresse, Stadt, Postleitzahl, E-Mail, Telefonnummer)

MVC mit Lazarus75

Interfaces

<<interface>>IMainView

+ BindPersonHeads(List: TPersonHeadList)

<<interface>>IDetailView

+ ShowPerson(APerson: TPerson)

#3 Person editieren

Beim Klick auf den „Bearbeiten“-Button soll in einem neuen Fenster alle Daten einer Person bearbeitet werden können.(Daten: Name, Vorname, Adresse, Stadt, Postleitzahl, E-Mail, Telefonnummer)

MVC mit Lazarus76

Interfaces

<<interface>>IMainView

+ BindPersonHeads(List: TPersonHeadList)

<<interface>>IDetailView

+ ShowPerson(APerson: TPerson)+ EditPerson(APerson: TPerson): Boolean

#3 Person editieren

Beim Klick auf den „Bearbeiten“-Button soll in einem neuen Fenster alle Daten einer Person bearbeitet werden können.(Daten: Name, Vorname, Adresse, Stadt, Postleitzahl, E-Mail, Telefonnummer)

MVC mit Lazarus77

Interfaces

<<interface>>IMainView

+ BindPersonHeads(List: TPersonHeadList)

<<interface>>IDetailView

+ ShowPerson(APerson: TPerson)+ EditPerson(APerson: TPerson): Boolean

#4 neue Person hinzufügen

Beim Klick auf den „Neu“-Button soll einem neuen Fenster die Daten zu einer neuen Person eingegeben werden können. Nach dem Klick auf Speichern soll die Person in die Datenbank geschrieben werden.

MVC mit Lazarus78

Interfaces

<<interface>>IMainView

+ BindPersonHeads(List: TPersonHeadList)

<<interface>>IDetailView

+ ShowPerson(APerson: TPerson)+ EditPerson(APerson: TPerson): Boolean+ NewPerson(APerson: TPerson): Boolean

#4 neue Person hinzufügen

Beim Klick auf den „Neu“-Button soll einem neuen Fenster die Daten zu einer neuen Person eingegeben werden können. Nach dem Klick auf Speichern soll die Person in die Datenbank geschrieben werden.

MVC mit Lazarus79

Interfaces

<<interface>>IMainView

+ BindPersonHeads(List: TPersonHeadList)

<<interface>>IDetailView

+ ShowPerson(APerson: TPerson)+ EditPerson(APerson: TPerson): Boolean+ NewPerson(APerson: TPerson): Boolean

<<interface>>IPersistence

+ GetAllPersonHeads: TPersonHeadList+ GetPerson(Id: LongInt): TPerson+ InsertPerson(APerson: TPerson)+ UpdatePerson(APerson: TPerson)

MVC mit Lazarus80

Interfaces

Analyse Design Implementierung

<<interface>>IMainView

+ BindPersonHeads(List: TPersonHeadList)

<<interface>>IDetailView

+ ShowPerson(APerson: TPerson)+ EditPerson(APerson: TPerson): Boolean+ NewPerson(APerson: TPerson): Boolean

<<interface>>IPersistence

+ GetAllPersonHeads: TPersonHeadList+ GetPerson(Id: LongInt): TPerson+ InsertPerson(APerson: TPerson)+ UpdatePerson(APerson: TPerson)

MVC mit Lazarus81

Controller

Analyse Design Implementierung

MVC mit Lazarus82

Controller

TMainController

+ <<constructor>> Create(ADao: IPersistence; AMainView: IMainView; ADetailView: IDetailView)

MVC mit Lazarus83

Controller

TMainController

+ <<constructor>> Create(ADao: IPersistence; AMainView: IMainView; ADetailView: IDetailView)+ CreatePerson+ EditPerson(PersonHead: TPersonHead)+ ShowDetails(PersonHead: TPersonHead)+ SyncMainview

MVC mit Lazarus84

Controller

Analyse Design Implementierung

TMainController

+ <<constructor>> Create(ADao: IPersistence; AMainView: IMainView; ADetailView: IDetailView)+ CreatePerson+ EditPerson(PersonHead: TPersonHead)+ ShowDetails(PersonHead: TPersonHead)+ SyncMainview

MVC mit Lazarus85

Analyse Design Implementierung

MVC mit Lazarus86

Analyse Design Implementierung

MVC mit Lazarus87

FragenFragenFragenFragen

??

MVC mit Lazarus88

Vortragsfolien zum DownloadVortragsfolien zum DownloadVortragsfolien zum DownloadVortragsfolien zum Download

http://go.michael-fuchs.net/156