Transcript
Page 1: TYPO3 5.0 - Der aktuelle Stand der Zukunft

TYPO3 5.0der aktuelle Stand der Zukunft

Jochen Rau <[email protected]>Mit Beiträgen von Robert Lemke und Sebastian KurfürstHohenheim, 15. Mai 2009

Page 2: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Wer ist das?

Dipl.-Ing. Maschinenbau (Universität Stuttgart)Erstinfektion mit TYPO3 im Jahr 2001 (danach 5 Jahre lang immun)lebe und arbeite heute in Tübingen

zu 60% selbständiger TYPO3-Entwicklerzu 60% Familienvater

Projektleiter für Extbase, dem neuen Framework für Extensions ab TYPO3 v4.3zuvor

5 Jahre wissenschaftlicher Mitarbeiter bei der Fraunhofer-Gesellschaft und dem Deutschen Zentrum für Luft- und Raumfahrt5 Jahre Oberstufenlehrer für Mathematik, Physik und Informatik

Page 3: TYPO3 5.0 - Der aktuelle Stand der Zukunft

TYPO3 heute

erste Veröffentlichung 199833 Kernentwicklerbisher 500.000 Zeilen Code committedaktuelle Codebase: 300.000 Zeilenaktuelle stabile Version: TYPO3 4.2.660.000 bis 80.000 Downloads pro Monatmehr als 30.000 Nutzer auf typo3.org registrierthöchste Verbreitung im Mittelstand, jedoch auch Nutzung in großen Firmen und Organisationen: Dassault Systems, 3M, Sixt, Unesco, Unicef, WWF

Page 4: TYPO3 5.0 - Der aktuelle Stand der Zukunft

TYPO3 heute

TYPO3 v4 ist nahezu vollständig ausgereiftletzte Releases: Fokus auf Usability-Verbesserungen für Benutzergewachsene Architektur

kaum Unit-Tests

inkonsistente API

keine durchgehend objektorientierte Programmierung

große Änderungen sind risikoreich bis unmöglichkeine klare Trennung zwischen Applikations-Framework und Content-Management-System

Page 5: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Warum TYPO3 v5.0?

Komplexität – Die Architektur des TYPO3 Core hat sein Limit erreich und benötigt viel EinarbeitungszeitDatenmodell – Der derzeitige Ansatz ist nicht flexibel genug und bereitet bei direktem Datenbankzugriff Probleme (auch mit DBAL)PHP5 – Die neuen Möglichkeiten von PHP5.3 erlauben eine viel sauberere ArchitekturSchnittstellen – Eine neue Architektur ermöglicht eine bessere Zusammenarbeit mit externen Diensten (SOAP, WebDAV, 3rd party tools)

Page 6: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Warum TYPO3 v5.0?

Auf mittlere Sicht werden an die 5.000 Extensions für TYPO3 4.x verfügbar sein - in sehr unterschiedlicher QualitätTYPO3 wird verstärkt in sicherheitskritischen Bereichen großer und mittlerer Unternehmen eingesetztDie Entwicklung für TYPO3 wird mehr und mehr professionalisiert (größere Teams mit mehr Aufgabenteilung)Neue CMS auf dem Markt können neue Technologien ohne Rücksicht auf bestehenden Code nutzen

Page 7: TYPO3 5.0 - Der aktuelle Stand der Zukunft

"Wir brauchen ein neues Framework!"

http://www.sxc.hu/photo/585791

Page 8: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Die TYPO3-Familie

Page 9: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Vergleich mit bestehenden Frameworks

Page 10: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Vergleich mit bestehenden Frameworks

Page 11: TYPO3 5.0 - Der aktuelle Stand der Zukunft

TYPO3 v5.0

Was bleibt?Es wird ein Back-End geben

TypoScript wird in einer neuen objektorientierten Version 2.0 veröffentlicht

Die Seitenbaum-Metapher bleibt erhalten

Was kommtKlare Trennung von Zuständigkeiten durch entkoppelte Schichten

Wiederverwendbare Komponenten

Die Speicherung des Contents wird transparent für das CMS

Vollständige Abstraktion von einer Speicherlösung

Security wird zentralisiert

Page 12: TYPO3 5.0 - Der aktuelle Stand der Zukunft

http://www.sxc.hu/photo/585791

Layered Architecture

Page 13: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Layered Architecture

Application Logic (Service Layer)

Domain Model (Domain Layer)

View

Controller

Data Mapper (part of Content Repository)

Data Source Abstraction

Presentation

Domain

Data source

Page 14: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Domain Driven Design

Page 15: TYPO3 5.0 - Der aktuelle Stand der Zukunft
Page 16: TYPO3 5.0 - Der aktuelle Stand der Zukunft
Page 17: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Domain-Driven Design

Domäne = Aktivität oder Geschäft des BenutzersFokus auf die Domäne, und die Logik der Domänegenaue Abbildung der Sprache und der Regeln innerhalb der Domänen auf Softwareuniverselle Sprache („ubiquitous language“) zwischen den Projektmitgliederndie selben Wörter für Diskussion, Modellierung, Entwicklung und Dokumentation

Page 18: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Domain-Model des Blog Example

Blog

Post

Comment Tag

AggregateAggregate

Root

Page 19: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Domain-Model des Blog Example

Page 20: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Domain-Model des Blog Example

Page 21: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Model-View-Controller Pattern

Dispatcher

Controller

Repository View

Request

findByName('MyBlog')

Response

Blog

assign(Blog)

Response

TYPO3

Domain Model

HTML

render()

1 2

3

4

5

6

Blog

Post

Comment Tag

BlogExample

Page 22: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Transparente Persistenz

Ein Persistence-Manager verwaltet alle ObjekteTransparent für den Programmierer

Alle Domain-Aggregates, die durch ein Repository verwaltet werden, werden automatisch persistiert

Änderungen an den Daten eines Objektes werden ebenfalls automatisch persistiert

Page 23: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Security

Page 24: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Security

AuthorizationAuthenticationValidation, FilteringApplication Firewall

Page 25: TYPO3 5.0 - Der aktuelle Stand der Zukunft

How to protect?

Es soll alles geschützt werden könnenDas Grundlegendste, was geschützt werden kann sind (PHP-)Funktionen und MethodenJemand muss entscheiden, ob eine Methode im aktuellen Kontext aufgerufen werden darfJeder Methodenaufruf wird per AOP abgefangen ohne das dies im original Code sichtbar ist (“touchless”) Zentralisierte Sicherheit: Rollen und Priviliegien werden in Access Control Lists (ACLs) definiert

Page 26: TYPO3 5.0 - Der aktuelle Stand der Zukunft

The security election – voting for access

Die Entscheidung über den Zugriff liegt bei sog. Access Decision VotersZugriff wird nur gewährt, falls mindestens ein “grant vote” und kein “deny vote” vorliegtEigene Voter können implementiert werdenEin Voter kann sich der Stimme enthalten, falls er nicht für die aktuelle Methode zuständig ist

Page 27: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Argument-Validierung

Alle Argumente, die an den Action-Controller übergeben werden, werden automatisch validiertWhite-Lists: Nur registrierte Argumente sind verfügbarDer Zugriff auf die $_GET- und $_POST-Variablen wird abgefangen

Page 28: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Argument-Validierung

FLOW3 wird mit einer stattlichen Anzahl von Validatoren ausgeliefert:AlphaNumeric, EmailAddress, Float, Integer, NotEmpty, Number, NumberRange, RegularExpression, UUID, TextEigene Validatoren können einfach erstellt werdenValidatoren können verkettet und verschachtelt werden

Page 29: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Definition der Validierungsregeln

Alle Validierungsregeln werden an Ort und Stelle durch Kommentare festgelegtZusätzliche Regeln können aufgenommen werden

class Blog {

/** * The blog's name. Also acts as the identifyer. * * @var string * @validate Alphanumeric, Length(minimum = 3, maximum = 50) * @identity */ protected $name = '';

/** * A short description of the blog * * @var string * @validate Text, Length(maximum = 150) */ protected $description = '';

Page 30: TYPO3 5.0 - Der aktuelle Stand der Zukunft

/** * Create action for this controller. * * @param string $author * @param string $emailAddress * @param F3\Blog\Domain\Model\Blog $blog * @return string The rendered view * @validate $emailAddress EmailAddress */ public function createAction($author, $emailAddress, F3\Blog\Domain\Model\Blog $blog) {

[...] }

Definition der Validierungsregeln

Page 31: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Application Firewall

Die erste VerteidigungslinieBlockiert Bad-Requests so früh wie möglichInnerhalb der Firewall kann ein Request anhand von Mustern klassifiziert werden (z.B. URL, IP address/range, ...)Falls ein Muster passt wird der zugehörige Interceptor aufgerufen (deny access, grant access, authentication required, ...)Falls kein Muster passt wird der Request standardmäßig abgewiesen

Page 32: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Managed Objects

Page 33: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Managed Objects

Der Lebenszyklus eines Objekts und das Zusammenspiel der aktiven Objekte wird durch den Object-Manager gesteuertDas Verhalten der Objekte ist in FLOW3 frei konfigurierbar

Page 34: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Playing with building blocks

Je weniger eine Klasse von einer anderen Klasse weiß, desto einfacher ist deren Wiederverwendung in verschiedenen KontextenGestalten Sie ihren eigenen LEGO-Baukasten, indem Sie voneinander klar getrennte und entkoppelte Klassen schreiben

Page 35: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Class Dependencies

Eine Klasse kommt selten alleineKlassen hänge von anderen Klassen ab, diese hängen von anderen Klassen ab, diese hängen von anderen ...Problem: Klassen verweisen explizit auf andere Klassen$phoneBookManager = new PhoneBookManager

Page 36: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Dependency Injection

In FLOW3 fragt eine Klasse nicht nach einer Instanz einer anderen Klasse; sie bekommt diese automatisch injiziertDas ist bekannt als das "Hollywood Principle":"Don't call us, we'll call you"Ermöglicht eine lose KopplungVerbessert den ProgrammierstilVorraussetzung für Unit Tests

Page 37: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Konstruktor ohne Dependency-Injection

/** * @var \F3\MyPackage\Model\CustomerRepository */ protected $customerRepository; /** * Constructor * * @author Robert Lemke <[email protected]> */ public function __construct() { $this->customerRepository = \F3\MyPackage\Model\CustomerRepository::getInstance(); }

Page 38: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Klasse mit Constructor-Injection

/** * @var \F3\MyPackage\Model\CustomerRepository */ protected $customerRepository; /** * Constructor * * @author Robert Lemke <[email protected]> */ public function __construct(\F3\MyPackage\Model\CustomerRepository $customerRepository) { $this->customerRepository = $customerRepository; }

Page 39: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Klasse mit Setter-Injection

/** * @var \F3\MyPackage\Model\CustomerRepository */ protected $customerRepository; /** * Injects the customer repository * * @author Robert Lemke <[email protected]> */ public function injectCustomerRepository(\F3\MyPackage\Model\CustomerRepository $customerRepository) { $this->customerRepository = $customerRepository; }

Page 40: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Klasse mit Property-Injection

/** * @var \F3\MyPackage\Model\CustomerRepository * @inject */ protected $customerRepository;

Page 41: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Aspektorientierte Programmierung

Page 42: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Aspektorientierte Programmierung

AOP ist ein Programmierparadigma und ergänzt OOPOOP modularisiert „concerns“ (Aufgabenbereiche): durch Pakete, Klassen, MethodenAOP: cross-cutting concerns

Page 43: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Cross-cutting concerns

Presentation

Domain

Data source

The concerns

live here

Page 44: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Cross-cutting concerns

Domain Model Domain Model Domain Model

Security

Logging

CONCERNSX-ING

Page 45: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Fehlende Funktionalität in PHP

Mit AOP kann manalle „cross-cutting concerns“ zentralisieren und sauber separierenbeliebige Methodenaufrufe abfangenneue Funktionalität zu Code hinzufügen, ohne diesen zu verändern... viele weitere Tricks anwenden

Page 46: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Exkurs: Das Security-Framework

Presentation

Domain

Data source

changeCustomerAction

Customer

Security Framework

$customer->setName(...)

Page 47: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Exkurs: Das Security-Framework

Presentation

Domain

Data source

changeCustomerAction

Customer

Security Framework

Touchless Security!

$customer->setName(...)

Page 48: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Test Driven Development

Page 49: TYPO3 5.0 - Der aktuelle Stand der Zukunft

... means that you write an automated test, then you write just enough code to make that one test pass, then you refactor the code primarily to improve readability and remove duplication.

Henrik Kniberg

Test Driven Development ...

Page 50: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Test Driven Development

Test Case FAIL?

Page 51: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Test Driven Development

Test Case ImplementationFAIL OK?

Page 52: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Test Driven Development

Test Case ImplementationFAIL OK Refactoring OK?

Page 53: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Test Driven Development

Test Case ImplementationFAIL OK Refactoring OK?

Page 54: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Fluid

The Zen of Templating

http://www.sxc.hu/photo/821903

Page 55: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Was ist eine Template-Engine?

übernimmt die Darstellung von Datenlebt in der View-KomponenteBekannte Engines

Smarty

*TAL

Velocity

Designer schreiben kein PHP, sondern HTML

Page 56: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Ziele für Fluid

einfache, elegante Template-Enginevielfältige Unterstützung für den Template-Schreiber (z. B. Autocompletion)einfache und saubere Erweiterbarkeit durch Trennung in Core-Komponenten und View-Helpervielerlei Ausgabemedien möglich

Page 57: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Grundkonzepte von Fluid

Ausgabelogik ist in View Helpers (Tags) gekapselt

Beispiel

{namespace f3=F3\Fluid\ViewHelpers}

<f:linkaction=“someAction“>more</f:link>

Namespace-Deklaration

Aufruf eines View Helpers

Page 58: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Grundkonzepte von Fluid

Jeder Tag entspricht einer Klasse

1. Beispiel{namespace f=F3\Fluid\ViewHelpers}

<f:link>...</f:link>F3\Fluid\ViewHelpers\LinkViewHelper

2. Beispiel{namespace f=F3\Fluid\ViewHelpers}<f:form.textbox />

Page 59: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Grundkonzepte von Fluid

Variablen

$this->view->assign(‘blogTitle’,

$blog->getTitle());

<h1>Der Name des Blogs ist: {blogTitle}</h1>

Page 60: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Grundkonzepte von Fluid

Object Accessors

$this->view->assign(‘blog’, $blog);

<h1>Der Name des Blogs ist: {blog.title}</h1>

<p>Autor: {blog.author}</p>

Getter / Setter werden automatisch aufgerufen

Page 61: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Grundkonzepte

Arrays

<f:link actionName=“show“

arguments=“{blog : blog, name : ‘Hallo’}“>

Posting anzeigen

</f:link>

JSON-Objektsyntax

Page 62: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Beispiel-Template aus dem Blog-Example

BlogExample/Resources/Private/Templates/Blog/index.html

Page 63: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Beispiel-Template aus dem Blog-Example

BlogExample/Resources/Private/Templates/Blog/edit.html

Page 64: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Migration von v4 nach v5TYPO3 Transition Days

Page 65: TYPO3 5.0 - Der aktuelle Stand der Zukunft

FLOW3 - der aktuelle Stand

Developing TYPO3 5.0 ...

Page 66: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Der aktuelle Stand

Locale

Log

MVC

Package

Persistence

Property

0% 50% 100%

AOP

Object

Config.

Cache

Error

Event

0% 50% 100%

Reflection

Resource

Session

Utility

Validation

0% 50% 100%

Page 67: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Nächste Schritte

erste FLOW3-Beta in 3 Monatenerste Pilotprojekte schon jetztWeiterentwicklung des CMSGeplanter Beta-Release von TYPO3 5.0: Anfang 2010

Page 68: TYPO3 5.0 - Der aktuelle Stand der Zukunft
Page 69: TYPO3 5.0 - Der aktuelle Stand der Zukunft

The Berlin Manifesto

We, the participants of the T3TD08 state that ...TYPO3 v4 continues to be actively developedv4 development will continue after the the release of v5Future releases of v4 will see its features converge with those in TYPO3 v5TYPO3 v5 will be the successor to TYPO3 v4Migration of content from TYPO3 v4 to TYPO3 v5 will be easily possibleTYPO3 v5 will introduce many new concepts and ideas. Learning never stops and we'll help with adequate resources to ensure a smooth transition.

Page 70: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Patrick Broens, Karsten Dambekalns, Dmitry Dulepov, Andreas Förthner, Oliver Hader,

Martin Herr, Christian Jul Jensen, Thorsten Kahler, Steffen Kamper, Christian Kuhn,

Sebastian Kurfürst, Martin Kutschker, Robert Lemke, Tobias Liebig, Benjamin Mack, Peter Niederlag, Jochen Rau, Ingo Renner, Ingmar Schlecht, Jeff Segars, Michael Stucki, Bastian

Waidelich

Page 71: TYPO3 5.0 - Der aktuelle Stand der Zukunft
Page 72: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Extbase — Das neue Framework für Extensions

"Nachfolger" von tslib_pibaseAusgewählte Komponenten und Paradigmen von FLOW3 wurden auf TYPO3 Version 4.3 portiert

Transparente Persistenz des Domain-Models

Model-View-Controller

Validierung

ZieleSchon jetzt mit „FLOW3-Paradigmen“ programmieren

Migration des Codes vereinfachen

Lernpfad zu TYPO3 v5 eröffnen

Page 73: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Domain Model

View

Other Stuff

Controller

Page 74: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Kickstarter für Extensions

Nachfolger für den bisherigen KickstarterRelease geplant für Juli 2009basiert auf den Prinzipien des Domain-Driven DesignProjekt des Google Summer of Code 2009

Page 75: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Fluid — Die Template-Engine für FLOW3 und v4.x

Fluid steht ab der Version 4.3 zur Verfügungautomatische Portierung des Kerns von Fluidan TYPO3 v4 angepasste Tags und View-HelperStandard Template-Engine für Extbase

Page 76: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Getting Started

Page 77: TYPO3 5.0 - Der aktuelle Stand der Zukunft
Page 78: TYPO3 5.0 - Der aktuelle Stand der Zukunft

Links

FLOW3 Websitehttp://flow3.typo3.orgTYPO3 Forge http://forge.typo3.orgDownloadhttps://svn.typo3.org/FLOW3/Distribution/trunkhttps://svn.typo3.org/FLOW3/Distribution/branches/BlogExampleFluid http://forge.typo3.org/projects/package-fluidhttp://blog.typoplanet.de

Page 79: TYPO3 5.0 - Der aktuelle Stand der Zukunft

inspiring people to share.


Top Related