Upload
jochen-rau
View
10.395
Download
12
Tags:
Embed Size (px)
DESCRIPTION
TYPO3 5.0der aktuelle Stand der Zukunft
Jochen Rau <[email protected]>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 <[email protected]> */ 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 <[email protected]> */ 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 <[email protected]> */ 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.