delphi mvc framework - wordpress.com...2016/01/01  · • delphi mvc framework -is a powerful...

20
Delphi MVC Framework Mathias Pannier

Upload: others

Post on 04-Jun-2021

19 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Delphi MVC Framework - WordPress.com...2016/01/01  · • Delphi MVC Framework -is a powerful framework for web solution in Delphi(Quelle: • Delphi Units für die Entwicklung von

Delphi MVC FrameworkMathias Pannier

Page 2: Delphi MVC Framework - WordPress.com...2016/01/01  · • Delphi MVC Framework -is a powerful framework for web solution in Delphi(Quelle: • Delphi Units für die Entwicklung von

Über mich

• Name: Mathias Pannier

• Position: Softwareentwickler/Teamleiter

• Mehr als 15 Jahre Erfahrung mit Softwareentwicklung in Delphi

• Blog: mathiaspannier.wordpress.com

mathiaspannier.wordpress.com

Page 3: Delphi MVC Framework - WordPress.com...2016/01/01  · • Delphi MVC Framework -is a powerful framework for web solution in Delphi(Quelle: • Delphi Units für die Entwicklung von

DMVCFramework

• Delphi MVC Framework - is a powerful framework for web solution in Delphi (Quelle: https://code.google.com/p/delphimvcframework/)

• Delphi Units für die Entwicklung von Web Diensten (REST Server/Clients)

• Website: https://github.com/danieleteti/delphimvcframework

• Supportsite: https://www.facebook.com/groups/delphimvcframework

mathiaspannier.wordpress.com

Page 4: Delphi MVC Framework - WordPress.com...2016/01/01  · • Delphi MVC Framework -is a powerful framework for web solution in Delphi(Quelle: • Delphi Units für die Entwicklung von

DMVCFramework

• Hauptentwickler und Initiator ist Daniele Teti (http://www.danieleteti.it - Autor von Delphi Cookbook)

• Im Delphi Cookbook gibt es einige Abschnitte über das DMVCFramework

• Derzeit 4 Entwickler

• Erster Stand in einem öffentlichen Repository vom 29.10.2013

• Letztes update vor ein paar Tagen (Januar 2016)

• läuft ab Delphi XE3 aufwärts

mathiaspannier.wordpress.com

Page 5: Delphi MVC Framework - WordPress.com...2016/01/01  · • Delphi MVC Framework -is a powerful framework for web solution in Delphi(Quelle: • Delphi Units für die Entwicklung von

Features

• Simple to use (really)

• RESTful (RMM Level 3) compliant

• Fancy URL with parameter mappings**

• Specialized renders to generate text, html, json**

• Powerful mapper to map json to objects and datasets to objects**

• Can be packaged as stand alone server, apache module (XE6 or better) and ISAPI dll

mathiaspannier.wordpress.com

Page 6: Delphi MVC Framework - WordPress.com...2016/01/01  · • Delphi MVC Framework -is a powerful framework for web solution in Delphi(Quelle: • Delphi Units für die Entwicklung von

Features

• Integrated RESTClient

• Messaging extension using STOMP

• Load balancing and cache using REDIS

• It use Embarcadero WebBroker but is not tied to it

• Designed with services and web client app in mind

• Server side generated pages using Mustache (in the past eLua)

• Uvm.

• Quelle: https://github.com/danieleteti/delphimvcframework und https://github.com/danieleteti/delphimvcframework/blob/master/docs/ITDevCON%202013%20-%20Introduction%20to%20DelphiMVCFramework.pdf

mathiaspannier.wordpress.com

Page 7: Delphi MVC Framework - WordPress.com...2016/01/01  · • Delphi MVC Framework -is a powerful framework for web solution in Delphi(Quelle: • Delphi Units für die Entwicklung von

mathiaspannier.wordpress.com

Page 8: Delphi MVC Framework - WordPress.com...2016/01/01  · • Delphi MVC Framework -is a powerful framework for web solution in Delphi(Quelle: • Delphi Units für die Entwicklung von

REST

• Representational State Transfer bezeichnet ein Programmierparadigma für verteilte Systeme, insbesondere für Webservices ... REST hat das Ziel einen Architekturstil zu schaffen, der besser die Anforderungen des modernen Web darstellt …

• Prinzipien: Client-Server, Zustandslosigkeit, (HTTP) Caching, einheitliche Schnittstelle (URL, HTTP Verben, JSON, HATEOAS –Navigation über URLs), mehrschichtige Systeme

• Quelle: https://de.wikipedia.org/wiki/Representational_State_Transfer

mathiaspannier.wordpress.com

Page 9: Delphi MVC Framework - WordPress.com...2016/01/01  · • Delphi MVC Framework -is a powerful framework for web solution in Delphi(Quelle: • Delphi Units für die Entwicklung von

Architektur

• eine Anwendung (EXE oder ISAPI DLL)

• mehrere Controller (TMVCController)

• mehrere Aktionen pro Controller (Methoden)

• Controller, Aktionen und deren Parameter sind Bestandteil der URL die aufgerufen wird

• www.myserver.com/blog/posts/123

mathiaspannier.wordpress.com

Page 10: Delphi MVC Framework - WordPress.com...2016/01/01  · • Delphi MVC Framework -is a powerful framework for web solution in Delphi(Quelle: • Delphi Units für die Entwicklung von

1. Beispiel - Delphi WebBroker Anwendung (ISAPI/EXE)

typeTWebModule1 = class(TWebModule)

procedure WebModuleCreate(Sender: TObject);private

DMVC: TMVCEngine;end;

procedureTWebModule1.WebModuleCreate(Sender: TObjec t);begin

DMVC := TMVCEngine.Create(self);DMVC.AddController(TBlogController);

end;

mathiaspannier.wordpress.com

Page 11: Delphi MVC Framework - WordPress.com...2016/01/01  · • Delphi MVC Framework -is a powerful framework for web solution in Delphi(Quelle: • Delphi Units für die Entwicklung von

1. Beispiel – Der Controllertype

[MVCPath('/blog')]

TBlogController = class(TMVCController)

public

[MVCPath('/posts/($id)')]

procedure GetPostByID(CTX: TWebContext);

end;

implementation

procedure TBlogController.GetPostByID(CTX: TWebContext);

var

aBlogPost: TBlogPost;

begin

aBlogPost := LoadFromDataBaseByID(CTX.Request.Parameters['id'].ToInteger);

Render(aBlogPost);

end;

mathiaspannier.wordpress.com

Page 12: Delphi MVC Framework - WordPress.com...2016/01/01  · • Delphi MVC Framework -is a powerful framework for web solution in Delphi(Quelle: • Delphi Units für die Entwicklung von

Parameter

• CTX.Request.Params['id']

• URL Parameter

• Query String Parameter

• Form Parameter (HTML Form Submit)

• Cookie Felder

• Bsp.: • www.myserver.com/blog/posts/123

• www.myserver.com/blog/posts?id=123

mathiaspannier.wordpress.com

Page 13: Delphi MVC Framework - WordPress.com...2016/01/01  · • Delphi MVC Framework -is a powerful framework for web solution in Delphi(Quelle: • Delphi Units für die Entwicklung von

Renderer

• Methoden des Controllers um den Response (Stream) zu“produzieren”

• Sie setzen den HTTP Status Code und den Content Type

• Verfügbare Renderer

• Text, DataSets, JSONValues, Delphi Objects, List of Delphi Objects, Exceptions, HTML pages using Mustache, Raw Streams

mathiaspannier.wordpress.com

Page 14: Delphi MVC Framework - WordPress.com...2016/01/01  · • Delphi MVC Framework -is a powerful framework for web solution in Delphi(Quelle: • Delphi Units für die Entwicklung von

Renderer Beispielprocedure TBlogController.GetPostByID(CTX: TWebConte xt);

var

aBlogPost: TBlogPost;

begin

aBlogPost := TBlogPost.Create;

aBlogPost.ID := CTX.Request.Parameters['id'].ToInte ger;

aBlogPost.Title := 'Hallo Welt';

aBlogPost.Body := 'Dies ist ein Test';

aBlogPost.CreateDate := Now();

aBlogPost.Author := 'Mathias Pannier';

Render(aBlogPost);

end;

procedure TBlogController.GetPostByID(CTX: TWebConte xt);

begin

DataSet1.SelectSQL.Add('select * from BLOG_POSTS wher e ID = :ID');

DataSet1.Params[0].AsInteger := CTX.Request.Paramete rs['id'].ToInteger;

DataSet1.Open;

Render(DataSet1);

end;

mathiaspannier.wordpress.com

Page 15: Delphi MVC Framework - WordPress.com...2016/01/01  · • Delphi MVC Framework -is a powerful framework for web solution in Delphi(Quelle: • Delphi Units für die Entwicklung von

Mapper

• "Konverter" für Delphi Objekte, JSon und DataSets

• Bsp.:

• ObjectToJSONObject

• JSONObjectToObject

• DataSetToJSONArray

• JSONArrayToDataSet

• ...

• Können auch unabhängig vom Web - Framework verwendet werden

mathiaspannier.wordpress.com

Page 16: Delphi MVC Framework - WordPress.com...2016/01/01  · • Delphi MVC Framework -is a powerful framework for web solution in Delphi(Quelle: • Delphi Units für die Entwicklung von

Mapper Beispielprocedure TForm1.Button1Click(Sender: TObject);

var

aBlogPost: TBlogPost;

begin

aBlogPost := TBlogPost.Create;

aBlogPost.ID := 1;

aBlogPost.Title := 'Hallo Welt';

aBlogPost.Body := 'Dies ist ein Test';

aBlogPost.CreateDate := Now();

aBlogPost.Author := 'Mathias Pannier';

ShowMessage(Mapper.ObjectToJSONObjectString(aBlogPost));

aBlogPost.Free;

end;

mathiaspannier.wordpress.com

Page 17: Delphi MVC Framework - WordPress.com...2016/01/01  · • Delphi MVC Framework -is a powerful framework for web solution in Delphi(Quelle: • Delphi Units für die Entwicklung von

Demo

mathiaspannier.wordpress.com

Page 18: Delphi MVC Framework - WordPress.com...2016/01/01  · • Delphi MVC Framework -is a powerful framework for web solution in Delphi(Quelle: • Delphi Units für die Entwicklung von

Alternativen

• von Hand mit den Indy Komponenten

• DataSnap (Embarcadero; in Delphi integriert)

• mORMot Framework

• TMS XData

• kbmMW

• RemObjects

• Usw.

mathiaspannier.wordpress.com

Page 19: Delphi MVC Framework - WordPress.com...2016/01/01  · • Delphi MVC Framework -is a powerful framework for web solution in Delphi(Quelle: • Delphi Units für die Entwicklung von

Warum DMVC

• Leichtgewichtig, Klein, Schnell

• Einfach zu benutzen

• OpenSource

• "näher dran" an REST/Webentwicklung/HTTP

• Mapper/Renderer unabhängig nutzbar

• Performance und Stabilität von DataSnap ... (https://robertocschneiders.wordpress.com/2012/11/22/datasnap-analysis-based-on-speed-stability-tests/)

mathiaspannier.wordpress.com

Page 20: Delphi MVC Framework - WordPress.com...2016/01/01  · • Delphi MVC Framework -is a powerful framework for web solution in Delphi(Quelle: • Delphi Units für die Entwicklung von

Fragen?

mathiaspannier.wordpress.com