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

Recommended