TYPO3 5.0 - Der aktuelle Stand der Zukunft

Post on 03-Sep-2014

10.410 views 12 download

Tags:

description

 

Transcript of TYPO3 5.0 - Der aktuelle Stand der Zukunft

TYPO3 5.0der aktuelle Stand der Zukunft

Jochen Rau <jochen.rau@typoplanet.de>Mit Beiträgen von Robert Lemke und Sebastian KurfürstHohenheim, 15. Mai 2009

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

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

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

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)

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

"Wir brauchen ein neues Framework!"

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

Die TYPO3-Familie

Vergleich mit bestehenden Frameworks

Vergleich mit bestehenden Frameworks

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

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

Layered Architecture

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

Domain Driven Design

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

Domain-Model des Blog Example

Blog

Post

Comment Tag

AggregateAggregate

Root

Domain-Model des Blog Example

Domain-Model des Blog Example

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

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

Security

Security

AuthorizationAuthenticationValidation, FilteringApplication Firewall

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

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

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

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

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 = '';

/** * 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

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

Managed Objects

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

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

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

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

Konstruktor ohne Dependency-Injection

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

Klasse mit Constructor-Injection

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

Klasse mit Setter-Injection

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

Klasse mit Property-Injection

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

Aspektorientierte Programmierung

Aspektorientierte Programmierung

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

Cross-cutting concerns

Presentation

Domain

Data source

The concerns

live here

Cross-cutting concerns

Domain Model Domain Model Domain Model

Security

Logging

CONCERNSX-ING

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

Exkurs: Das Security-Framework

Presentation

Domain

Data source

changeCustomerAction

Customer

Security Framework

$customer->setName(...)

Exkurs: Das Security-Framework

Presentation

Domain

Data source

changeCustomerAction

Customer

Security Framework

Touchless Security!

$customer->setName(...)

Test Driven Development

... 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 ...

Test Driven Development

Test Case FAIL?

Test Driven Development

Test Case ImplementationFAIL OK?

Test Driven Development

Test Case ImplementationFAIL OK Refactoring OK?

Test Driven Development

Test Case ImplementationFAIL OK Refactoring OK?

Fluid

The Zen of Templating

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

Was ist eine Template-Engine?

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

Smarty

*TAL

Velocity

Designer schreiben kein PHP, sondern HTML

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

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

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 />

Grundkonzepte von Fluid

Variablen

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

$blog->getTitle());

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

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

Grundkonzepte

Arrays

<f:link actionName=“show“

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

Posting anzeigen

</f:link>

JSON-Objektsyntax

Beispiel-Template aus dem Blog-Example

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

Beispiel-Template aus dem Blog-Example

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

Migration von v4 nach v5TYPO3 Transition Days

FLOW3 - der aktuelle Stand

Developing TYPO3 5.0 ...

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%

Nächste Schritte

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

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.

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

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

Domain Model

View

Other Stuff

Controller

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

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

Getting Started

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

inspiring people to share.