TYPO3 5.0 der aktuelle Stand der Zukunft Jochen Rau Mit Beitrgen
von Robert Lemke und Sebastian Kurfrst Hohenheim, 15. Mai 2009 Wer
ist das? Dipl.-Ing. Maschinenbau (Universitt Stuttgart)
Erstinfektion mit TYPO3 im Jahr 2001 (danach 5 Jahre lang immun)
lebe und arbeite heute in Tbingen zu 60% selbstndiger
TYPO3-Entwickler zu 60% Familienvater Projektleiter fr Extbase, dem
neuen Framework fr Extensions ab TYPO3 v4.3 zuvor 5 Jahre
wissenschaftlicher Mitarbeiter bei der Fraunhofer-Gesellschaft und
dem Deutschen Zentrum fr Luft- und Raumfahrt 5 Jahre
Oberstufenlehrer fr Mathematik, Physik und Informatik TYPO3 heute
erste Verentlichung 1998 33 Kernentwickler bisher 500.000 Zeilen
Code committed aktuelle Codebase: 300.000 Zeilen aktuelle stabile
Version: TYPO3 4.2.6 60.000 bis 80.000 Downloads pro Monat mehr als
30.000 Nutzer auf typo3.org registriert hchste Verbreitung im
Mittelstand, jedoch auch Nutzung in groen Firmen und
Organisationen: Dassault Systems, 3M, Sixt, Unesco, Unicef, WWF
TYPO3 heute TYPO3 v4 ist nahezu vollstndig ausgereift letzte
Releases: Fokus auf Usability-Verbesserungen fr Benutzer gewachsene
Architektur kaum Unit-Tests inkonsistente API keine durchgehend
objektorientierte Programmierung groe nderungen sind risikoreich
bis unmglich keine klare Trennung zwischen Applikations-Framework
und Content-Management-System Warum TYPO3 v5.0? Komplexitt Die
Architektur des TYPO3 Core hat sein Limit erreich und bentigt viel
Einarbeitungszeit Datenmodell Der derzeitige Ansatz ist nicht
exibel genug und bereitet bei direktem Datenbankzugri Probleme
(auch mit DBAL) PHP5 Die neuen Mglichkeiten von PHP5.3 erlauben
eine viel sauberere Architektur Schnittstellen Eine neue
Architektur ermglicht eine bessere Zusammenarbeit mit externen
Diensten (SOAP, WebDAV, 3rd party tools) Warum TYPO3 v5.0? Auf
mittlere Sicht werden an die 5.000 Extensions fr TYPO3 4.x verfgbar
sein - in sehr unterschiedlicher Qualitt TYPO3 wird verstrkt in
sicherheitskritischen Bereichen groer und mittlerer Unternehmen
eingesetzt Die Entwicklung fr TYPO3 wird mehr und mehr
professionalisiert (grere Teams mit mehr Aufgabenteilung) Neue CMS
auf dem Markt knnen neue Technologien ohne Rcksicht auf bestehenden
Code nutzen quot;Wir brauchen ein neues Framework!quot;
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 verentlicht Die
Seitenbaum-Metapher bleibt erhalten Was kommt Klare Trennung von
Zustndigkeiten durch entkoppelte Schichten Wiederverwendbare
Komponenten Die Speicherung des Contents wird transparent fr das
CMS Vollstndige Abstraktion von einer Speicherlsung Security wird
zentralisiert Layered Architecture http://www.sxc.hu/photo/585791
Layered Architecture View Presentation Controller Application Logic
(Service Layer) Domain Domain Model (Domain Layer) Data Mapper
(part of Content Repository) Data source Data Source Abstraction
Domain Driven Design Domain-Driven Design Domne = Aktivitt oder
Geschft des Benutzers Fokus auf die Domne, und die Logik der Domne
genaue Abbildung der Sprache und der Regeln innerhalb der Domnen
auf Software universelle Sprache (ubiquitous language) zwischen den
Projektmitgliedern die selben Wrter fr Diskussion, Modellierung,
Entwicklung und Dokumentation Domain-Model des Blog Example
Aggregate Aggregate Root Blog Post Comment Tag Domain-Model des
Blog Example Domain-Model des Blog Example Model-View-Controller
Pattern 1 2 BlogExample Request Dispatcher TYPO3 HTML Response
Controller 6 3 assign(Blog) 5 render() findByName('MyBlog') Blog
Response 4 View Repository Domain Model Blog Post Comment Tag
Transparente Persistenz Ein Persistence-Manager verwaltet alle
Objekte Transparent fr 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 Authorization
Authentication Validation, Filtering Application Firewall How to
protect? Es soll alles geschtzt werden knnen Das Grundlegendste,
was geschtzt werden kann sind (PHP-)Funktionen und Methoden Jemand
muss entscheiden, ob eine Methode im aktuellen Kontext aufgerufen
werden darf Jeder 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) deniert The security election voting for access Die
Entscheidung ber den Zugri liegt bei sog. Access Decision Voters
Zugri wird nur gewhrt, falls mindestens ein grant vote und kein
deny vote vorliegt Eigene Voter knnen implementiert werden Ein
Voter kann sich der Stimme enthalten, falls er nicht fr die
aktuelle Methode zustndig ist Argument-Validierung Alle Argumente,
die an den Action-Controller bergeben werden, werden automatisch
validiert White-Lists: Nur registrierte Argumente sind verfgbar Der
Zugri 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,
Text Eigene Validatoren knnen einfach erstellt werden Validatoren
knnen verkettet und verschachtelt werden Denition der
Validierungsregeln Alle Validierungsregeln werden an Ort und Stelle
durch Kommentare festgelegt Zustzliche Regeln knnen 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 =
''; Denition der Validierungsregeln /** * Create action for this
controller. * * @param string $author * @param string $emailAddress
* @param F3BlogDomainModelBlog $blog * @return string The rendered
view * @validate $emailAddress EmailAddress */ public function
createAction($author, $emailAddress, F3BlogDomainModelBlog $blog) {
[...] } Application Firewall Die erste Verteidigungslinie Blockiert
Bad-Requests so frh wie mglich Innerhalb der Firewall kann ein
Request anhand von Mustern klassiziert werden (z.B. URL, IP
address/range, ...) Falls ein Muster passt wird der zugehrige
Interceptor aufgerufen (deny access, grant access, authentication
required, ...) Falls kein Muster passt wird der Request standardmig
abgewiesen Managed Objects Managed Objects Der Lebenszyklus eines
Objekts und das Zusammenspiel der aktiven Objekte wird durch den
Object-Manager gesteuert Das Verhalten der Objekte ist in FLOW3
frei kongurierbar Playing with building blocks Je weniger eine
Klasse von einer anderen Klasse wei, desto einfacher ist deren
Wiederverwendung in verschiedenen Kontexten Gestalten Sie ihren
eigenen LEGO-Baukasten, indem Sie voneinander klar getrennte und
entkoppelte Klassen schreiben Class Dependencies Eine Klasse kommt
selten alleine Klassen hnge von anderen Klassen ab, diese hngen von
anderen Klassen ab, diese hngen 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 injiziert Das ist bekannt als das quot;Hollywood
Principlequot;: quot;Don't call us, we'll call youquot; Ermglicht
eine lose Kopplung Verbessert den Programmierstil Vorraussetzung fr
Unit Tests Konstruktor ohne Dependency-Injection /** * @var
F3MyPackageModelCustomerRepository */ protected
$customerRepository; /** * Constructor * * @author Robert Lemke */
public function __construct() { $this->customerRepository =
F3MyPackageModel CustomerRepository::getInstance(); } Klasse mit
Constructor-Injection /** * @var F3MyPackageModelCustomerRepository
*/ protected $customerRepository; /** * Constructor * * @author
Robert Lemke */ public function
__construct(F3MyPackageModelCustomerRepository $customerRepository)
{ $this->customerRepository = $customerRepository; } Klasse mit
Setter-Injection /** * @var F3MyPackageModelCustomerRepository */
protected $customerRepository; /** * Injects the customer
repository * * @author Robert Lemke */ public function
injectCustomerRepository(F3MyPackageModelCustomerRepository
$customerRepository) { $this->customerRepository =
$customerRepository; } Klasse mit Property-Injection /** * @var
F3MyPackageModelCustomerRepository * @inject */ protected
$customerRepository; Aspektorientierte Programmierung
Aspektorientierte Programmierung AOP ist ein Programmierparadigma
und ergnzt OOP OOP modularisiert concerns (Aufgabenbereiche): durch
Pakete, Klassen, Methoden AOP: cross-cutting concerns Cross-cutting
concerns Presentation The concerns live here Domain Data source
Cross-cutting concerns Domain Model Domain Model Domain Model
CONCER NS Security X-ING Logging Fehlende Funktionalitt in PHP Mit
AOP kann man alle cross-cutting concerns zentralisieren und sauber
separieren beliebige Methodenaufrufe abfangen neue Funktionalitt zu
Code hinzufgen, ohne diesen zu verndern ... viele weitere Tricks
anwenden Exkurs: Das Security-Framework $customer->setName(...)
Presentation changeCustomerAction Security Framework Domain
Customer Data source Exkurs: Das Security-Framework
$customer->setName(...) Presentation changeCustomerAction
Security Framework Domain Customer Data source Touchless Security!
Test Driven Development 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 FAIL Test Case ? Test Driven Development FAIL OK
Test Case ? Implementation Test Driven Development FAIL OK OK
Refactoring Test Case ? Implementation Test Driven Development FAIL
OK OK Refactoring Test Case ? Implementation Fluid The Zen of
Templating http://www.sxc.hu/photo/821903 Was ist eine
Template-Engine? bernimmt die Darstellung von Daten lebt in der
View-Komponente Bekannte Engines Smarty *TAL Velocity Designer
schreiben kein PHP, sondern HTML Ziele fr Fluid einfache, elegante
Template-Engine vielfltige Untersttzung fr den Template-Schreiber
(z. B. Autocompletion) einfache und saubere Erweiterbarkeit durch
Trennung in Core-Komponenten und View-Helper vielerlei
Ausgabemedien mglich Grundkonzepte von Fluid Ausgabelogik ist in
View Helpers (Tags) gekapselt Namespace- Beispiel Deklaration
{namespace f3=F3FluidViewHelpers} more Aufruf eines View Helpers
Grundkonzepte von Fluid Jeder Tag entspricht einer Klasse 1.
Beispiel {namespace f=F3FluidViewHelpers} ...
F3FluidViewHelpersLinkViewHelper 2. Beispiel {namespace
f=F3FluidViewHelpers} Grundkonzepte von Fluid Variablen
$this->view->assign(blogTitle, $blog->getTitle()); Der
Name des Blogs ist: {blogTitle} Grundkonzepte von Fluid Object
Accessors $this->view->assign(blog, $blog); Der Name des
Blogs ist: {blog.title} Autor: {blog.author} Getter / Setter werden
automatisch aufgerufen Grundkonzepte Arrays Posting anzeigen
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 v5 TYPO3 Transition Days FLOW3 - der aktuelle Stand
Developing TYPO3 5.0 ... Der aktuelle Stand Reflection Locale AOP
Resource Log Object MVC Config. Session Package Cache Utility
Persistence Error Validation Property Event 0% 50% 100% 0% 50% 100%
0% 50% 100% Nchste Schritte erste FLOW3-Beta in 3 Monaten erste
Pilotprojekte schon jetzt Weiterentwicklung des CMS Geplanter
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 developed v4 development will continue after the the
release of v5 Future releases of v4 will see its features converge
with those in TYPO3 v5 TYPO3 v5 will be the successor to TYPO3 v4
Migration of content from TYPO3 v4 to TYPO3 v5 will be easily
possible TYPO3 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 Frthner, Oliver Hader, Martin Herr,
Christian Jul Jensen, Thorsten Kahler, Steen Kamper, Christian
Kuhn, Sebastian Kurfrst, Martin Kutschker, Robert Lemke, Tobias
Liebig, Benjamin Mack, Peter Niederlag, Jochen Rau, Ingo Renner,
Ingmar Schlecht, Je Segars, Michael Stucki, Bastian Waidelich
Extbase Das neue Framework fr Extensions quot;Nachfolgerquot; von
tslib_pibase Ausgewhlte Komponenten und Paradigmen von FLOW3 wurden
auf TYPO3 Version 4.3 portiert Transparente Persistenz des
Domain-Models Model-View-Controller Validierung Ziele Schon jetzt
mit FLOW3-Paradigmen programmieren Migration des Codes vereinfachen
Lernpfad zu TYPO3 v5 ernen Controlle r Model Domain View Oth er Stu
ff Kickstarter fr Extensions Nachfolger fr den bisherigen
Kickstarter Release geplant fr Juli 2009 basiert auf den Prinzipien
des Domain-Driven Design Projekt des Google Summer of Code 2009
Fluid Die Template-Engine fr FLOW3 und v4.x Fluid steht ab der
Version 4.3 zur Verfgung automatische Portierung des Kerns von
Fluid an TYPO3 v4 angepasste Tags und View-Helper Standard
Template-Engine fr Extbase Getting Started Links FLOW3 Website
http://ow3.typo3.org TYPO3 Forge http://forge.typo3.org Download
https://svn.typo3.org/FLOW3/Distribution/trunk
https://svn.typo3.org/FLOW3/Distribution/branches/ BlogExample
Fluid http://forge.typo3.org/projects/package-uid
http://blog.typoplanet.de inspiring people to share.