FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

166
Inspiring people to share TYPO3 User Group Dresden - 21. Januar 2009 FLOW3 - der aktuelle Stand

description

Überblick über FLOW3, Fluid und die Relation TYPO3 v4 und TYPO3 v5. Es werden wichtige Konzepte wie Dependecy Injection, AOP, TDD vorgestellt. Desweiteren wird Fluid präsentiert.

Transcript of FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Page 1: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshare

TYPO3 User Group Dresden - 21. Januar 2009

FLOW3 - der aktuelle Stand

Page 2: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshare

TYPO3 User Group Dresden - 21. Januar 2009

FLOW3 - der aktuelle Stand

Page 3: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

FLOW3 - Der aktuelle Stand

Sebastian Kurfürst <[email protected]>

21.01.2009

Vielen Dank an Robert Lemke für seine Slides

Page 4: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Page 5: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Page 6: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Page 7: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Page 8: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Page 9: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Page 10: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

- ACHTUNG -TYPO3-Evangelist

Page 11: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Inhalt

TYPO3 - Einführung

FLOW3

Fluid - The Zen of Templating

Synergien TYPO3 v4 und v5

Test Driven Development

Dependency Injection

Aspektorientierte Programmierung

Domain Driven Design & MVC

Page 12: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Inhalt

TYPO3 - Einführung

FLOW3

Fluid - The Zen of Templating

Synergien TYPO3 v4 und v5

Test Driven Development

Dependency Injection

Aspektorientierte Programmierung

Domain Driven Design & MVC

Page 13: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

TYPO3

Open Source Content Management System

Aktuelle stabile Version: TYPO3 4.2.3

60.000 bis 80.000 Downloads pro Monat

mehr als 30.000 Nutzer auf typo3.org registriert

Höchste Verbreitung im Mittelstand, jedoch auch Nutzung in großen Firmen: Dassault Systems, 3M, Sixt, Unesco, Unicef, WWF

Page 14: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Die Geschichte von TYPO3

seit 1998

33 Kernentwickler

bisher 500.000 Zeilen Code committed

aktuelle Codebase: 300.000 Zeilen

Page 15: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Warum benötigen wir TYPO3 v5?

Page 16: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

TYPO3 Heute

TYPO3 v4 ist nahezu vollständig ausgereift

Letzte Releases: Fokus auf Usability-Verbesserungen für Benutzer

Page 17: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Gewachsene Architektur

© K. Tuck at http://www.sxc.hu/photo/1135191

Page 18: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

TYPO3 Heute

TYPO3 v4 ist nahezu vollständig ausgereift

Letzte Releases: Fokus auf Usability-Verbesserungen für Benutzer

Gewachsene Architektur, keine Unit Tests

Große Änderungen sind daher risikoreich / unmöglich

TYPO3 wird oft als Anwendungsframework verwendet - es ist jedoch ein CMS

Page 19: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

TYPO3 in der Zukunft?

Page 20: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Warum sollte man von Null anfangen?

Page 21: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Source: The Secret Archives of TYPO3

Page 22: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

„We need a new framework!“

Page 23: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Zwei auf einen Streich

Page 24: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

TYPO3 in der Zukunft!

FLOW3

TYPO3 v5

Enterprise Application Framework

Enterprise CMS

Page 25: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Page 26: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Inhalt

TYPO3 - Einführung

FLOW3

Fluid - The Zen of Templating

Synergien TYPO3 v4 und v5

Test Driven Development

Dependency Injection

Aspektorientierte Programmierung

Domain Driven Design & MVC

Page 27: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Flow [flō] (engl. fließen, rinnen, strömen) bedeutet das Gefühl des völligen Aufgehens in einer Tätigkeit. In diesem Zustand besteht völlige Harmonie zwischen dem limbischen System, das die Emotionen steuert, und dem kortikalen System, dem der Sitz für Bewusstsein und Verstand zugeordnet wird.

FLOW3 [flō'three] Das Web-Anwendungsframework, welches alle Schwierigkeiten löst, sodass man sich auf das Wesentliche konzentrieren kann.

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

Page 28: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

FLOW3 = Anwendungsframework

Nicht nur eine Zusammenstellung von Komponenten oder eine „Snippet-Library“

geliefert mit einsatzfähiger Standardkonfiguration

Paketbasiert

benötigt mindestens PHP 5.3

mit einem mächtigen JSR-283-basierten Content Repository geliefert

Alpha3

Page 29: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Genieße das FLOW3-Erlebnis

Intuitive APIs

Lesbarer Quellcode (wie ein Buch)

Konsistente Benennung für Klassen, Methoden und Eigenschaften

Page 30: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Fokus auf das Wesentliche

das Frameworkkümmert sichum den Rest

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

Page 31: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Die Grundpfeiler von FLOW3

Test Driven Development

Dependency Injection

Aspect Oriented Programming

Page 32: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Die Grundpfeiler von FLOW3

«SCRUM and XP from the trenches

Henrik Kniberg

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.

Page 33: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

»

Inspiring people toshareFLOW3 - der aktuelle Stand

Die Grundpfeiler von FLOW3

«SCRUM and XP from the trenches

Henrik Kniberg

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.

Page 34: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Die Grundpfeiler von FLOW3

Test Driven Development

Test Case ImplementationFAIL OK Refactoring OK

Page 35: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Die Grundpfeiler von FLOW3

Test Driven Development - Demonstration

Eine Klasse schreiben, welche eine „square“-Methode besitzt. Diese multipliziert eine Zahl mit sich selbst und gibt das Ergebnis zurück.

Akademisches Beispiel!

Page 36: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

1. Test Case schreiben!

Page 37: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Achtung - veraltete

Namespace-Syntax!

Neue Syntax:

\F3\Math\Helpers::square()

Page 38: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Der Test Case schlägt fehl.

Page 39: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

2. Implementieren!

Page 40: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Der Test Case ...

Page 41: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
Page 42: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Design-Problemewerden zeitiger

gefunden!

Page 43: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Unit Tests sind einAuffangnetz für die

Zukunft

Page 44: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Die Grundpfeiler von FLOW3

Test Driven Development

zuerst Unit Tests schreiben, dann den zu testenden Code

Software-Designer

Programmierer

Page 45: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
Page 46: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Die Grundpfeiler von FLOW3

Dependency Injection

Hollywood Principle: „Don‘t call us, we call you“

Anwendung des „Inversion of Control“-Patterns für die Erzeugung und Initialisierung von Objekten

Page 47: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

BookingWebService

Logger Objekt 3

<<create>>

public function __construct() {// Prototype$this->logger = new Logger();// oder als Singleton:$this->logger = Logger->getInstance()

}

Ohne Dependency Injection

Die Grundpfeiler von FLOW3

Page 48: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

public function __construct() {// Prototype$this->logger = new Logger();// oder als Singleton:$this->logger = Logger->getInstance()

}

Ohne Dependency Injection

Wie schreibt man Unit Tests für solch einen Code?

Wie entscheidet man zur Laufzeit,welcher Logger instanziert wird?

Die Grundpfeiler von FLOW3

Page 49: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

BookingWebService

Logger Objekt 3

<<needs>>

Mit Dependency Injection

IoC Container

Jedes Objekt deklariert, welche anderen Objekte es benötigt

Der IoC Container ...

... gibt dem Objekt fertig initialisierte Objekte

... entscheidet zur Laufzeit, welche Klassen instanziert werden

Die Grundpfeiler von FLOW3

Page 50: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Constructor Injection

Die Grundpfeiler von FLOW3

Mit Dependency Injection

public function __construct(\F3\FLOW3\Log\Logger $logger) {$this->logger = $logger;

} Das Framework injiziert den

Logger

Page 51: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Setter Injection

Die Grundpfeiler von FLOW3

Mit Dependency Injection

public function injectLogger(\F3\FLOW3\Log\Logger $logger) {$this->logger = $logger;

} Das Framework injiziert den

Logger

Page 52: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Die Grundpfeiler von FLOW3

Mit Dependency Injection

Jede Klasse ist einzeln testbar, indem man die benötigten Abhängigkeiten mit Mocks / Stubs simuliert

Man kann konfigurieren, ob Klassen sich wie Singletons oder Prototypes verhalten

@scope singleton (Standard)

@scope prototype

Page 53: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Die Grundpfeiler von FLOW3

Mit Dependency Injection

Man kann zur Laufzeit entscheiden, welche Klasse verwendet werden soll

BookingWebService

LoggerInterface

FileLogger DatabaseLogger

Page 54: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
Page 55: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Die Grundpfeiler von FLOW3

Aspektorientierte Programmierung

AOP ist ein Programmierparadigma

ergänzt OOP

OOP modularisiert „concerns“ (Aufgabenbereiche): durch Pakete, Klassen, Methoden

AOP: cross-cutting concerns

Page 56: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Aspektorientierte Programmierung

Cross-cutting concerns

Presentation

Domain

Data source

Page 57: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Aspektorientierte Programmierung

Cross-cutting concerns

Presentation

Domain

Data source

The concerns

live here

Page 58: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Aspektorientierte Programmierung

Cross-cutting concerns

Domain Model Domain Model Domain Model

Security

LoggingCONCERNS

X-ING

Page 59: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Aspektorientierte Programmierung

PHP‘s fehlende Funktionalität

Mit AOP kann man:

alle „cross-cutting concerns“ zentralisieren und sauber separieren

beliebige Methodenaufrufe abfangen

neue Funktionalität zu Code hinzufügen, ohne diesen zu verändern

... viele weitere Tricks anwenden

Page 60: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Aspektorientierte Programmierung

Exkurs: Das Security-Framework

Presentation

Domain

Data source

changeCustomerAction

Customer

Security Framework

Touchless Security!

$customer->setName(...)

Page 61: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
Page 62: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

FLOW3-Module

AOP

Object

Configuration

Cache

Error

Event

Locale

Log

MVC

Package

Persistence

Property

Reflection

Resource

Session

Utility

Validation

... und mehr

Page 63: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

DomainDrivenDesign

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

Page 64: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Domain Driven Design

Domäne = Aktivität oder Geschäft des Benutzers

Es geht um...

den Fokus auf die Domäne, und die Logik der Domäne

die genaue Abbildung der Domänenregeln in Software

das Schaffen einer universellen Sprache („Ubiquitous language“) zwischen den Projektmitgliedern

Page 65: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Der Turm zu Babel

Page 66: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Domain Driven Design

Ubiquitous language

Gemeinsames Vokabular ist eine wichtige Grundvoraussetzung, um miteinander zu arbeiten

Benutze die selben Wörter für Diskussion, Modellierung, Entwicklung und Dokumentation

Page 67: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Domain Driven Design

Beispiel: Phone Book

Page 68: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Domain Driven Design

Beispiel: Phone Book

showEntries()checkIfUserCanDeleteEntry()exportPhoneBook()logChanges()

Page 69: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Domain Driven Design

Beispiel: Phone Book

showEntries()checkIfUserCanDeleteEntry()exportPhoneBook()logChanges()

Nicht in derPhoneBook-

Domäne!

Page 70: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Domain Driven Design

Schichtenarchitektur

Presentation

Domain

Data source

Page 71: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Domain Driven Design

Schichtenarchitektur

Application Logic (Service Layer)

Domain Model (Domain Layer)

View

Controller

Data Mapper (part of Content Repository)

Data Source Abstraction

Presentation

Domain

Data source

Page 72: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Domain Driven Design

Schichtenarchitektur

Presentation

Domain

Data source

Application Logic (Service Layer)

Domain Model (Domain Layer)

View

Controller

Data Mapper (part of Content Repository)

Data Source Abstraction

Page 73: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Model View Controller

Page 74: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

MVC

Model

Objekt, welches Daten und Geschäftslogik einer bestimmten Domäne enthält

enthält keine Informationen über die Darstellung der Daten, sondern definiert das Verhalten

in FLOW3 nutzen wir Domain Models

Page 75: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

MVC

View

Darstellung des Models im Web oder in anderen Ausgabemedien

Stellen nur Daten dar, verändern diese nicht.

Page 76: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

MVC

Controller

Reagiert auf Benutzereingaben

Wählt das Model und verändert dieses wie benötigt

Wählt den View aus und gibt diesem die Daten, die er rendern soll

Der Standard-Controller für FLOW3 ist der ActionController

Page 77: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
Page 78: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

MVC und DDD mit FLOW3

Page 79: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

DEMO

Page 80: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

MVC und DDD mit FLOW3

Dateistruktur

Page 81: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

MVC und DDD mit FLOW3

Domain Model

Page 82: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

MVC und DDD mit FLOW3

Domain Model

Page 83: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
Page 84: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
Page 85: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
Page 86: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
Page 87: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

MVC und DDD mit FLOW3

Domain Model

Page 88: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

MVC und DDD mit FLOW3

Domain Model

Page 89: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

MVC und DDD mit FLOW3

Domain Model

Page 90: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

MVC und DDD mit FLOW3

Aber - Persistenz?

durch einen Persistence Manager werden Objekte gespeichert

Transparent für den Programmierer

Page 91: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

MVC und DDD mit FLOW3

Aber - Persistenz?

MySQL

PDO

Postgres SQLite

...

JSR-283 Content Repository

Persistence Manager

Anwendung Anwendung

Page 92: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

DEMO

Page 93: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

MVC und DDD mit FLOW3

Controller

Normal: Erben von \F3\FLOW3\MVC\Controller\ActionController

public function indexAction() {// ...

}public function listAction() {

// ...}

Page 94: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
Page 95: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
Page 96: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
Page 97: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
Page 98: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

MVC und DDD mit FLOW3

Controller-Argumente

Jedes Argument muss explizit deklariert werden

Zugriff auf $_GET, $_POST ist nicht erlaubt und wird abgefangen!

Page 99: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

MVC und DDD mit FLOW3

Controller-Argumente

Argument-Mapping von einfachen Argumenten

public function initializeArguments() {$this->arguments->addNewArgument(“tag”, “Text“);

}public function listByTagAction() {

$tag = $this->arguments[‘tag’]->getValue();// $tag ist ein String!

}

Argumentregistrierungwird noch schöner!

Page 100: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

MVC und DDD mit FLOW3

Controller-Argumente

Argument-Mapping von einfachen Argumenten

public function initializeArguments() {$this->arguments->addNewArgument(“tag”, “UUID“);

}public function listByTagAction() {

$tag = $this->arguments[‘tag’]->getValue();// $tag ist eine UUID!

}

Page 101: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

MVC und DDD mit FLOW3

Controller-Argumente

Argument-Mapping von komplexen Argumenten

public function initializeArguments() {$this->arguments->addNewArgument(“comment”, “F3\Blog\Domain\Comment“);

}public function addNewCommentAction() {

$comment = $this->arguments[‘comment’]->getValue();// $comment ist ein Comment-Objekt!

}

Page 102: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

MVC und DDD mit FLOW3

View

... ist eine PHP-Klasse, welche von \F3\FLOW3\MVC\View\AbstractView erbt

es gibt Standardklassen für marker-basierte Views, Smarty-basierte Views, und...

Fluid!

Page 103: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
Page 104: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Fluid - The Zen of Templating

Page 105: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Inhalt

TYPO3 - Einführung

FLOW3

Fluid - The Zen of Templating

Synergien TYPO3 v4 und v5

Test Driven Development

Dependency Injection

Aspektorientierte Programmierung

Domain Driven Design & MVC

Page 106: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Fluid

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

Page 107: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Source: http://en.wikipedia.org/wiki/Template_engine_(web)

Page 108: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Fluid

Nachteile existierender Template Engines

nicht komplett OOP / brechen OOP-Paradigmen an einigen Stellen

schwierig für nicht-HTML-basierte Templates nutzbar

keine Autovervollständigung in Editoren

nicht einfach erweiterbar

Page 109: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

The Zen of Templating

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

simpel mächtig

Page 110: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

The Zen of Templating

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

intuitiv einfach erlernbar

Page 111: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

«Leonardo Da Vinci

Einfachheit ist die ultimative Vollkommenheit.

Page 112: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

»

Inspiring people toshareFLOW3 - der aktuelle Stand

«Leonardo Da Vinci

Einfachheit ist die ultimative Vollkommenheit.

Page 113: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Fluid

Ziel

Einfache, elegante Template Engine

vielfältige Unterstützung für den Template-Schreiber

einfache und saubere Erweiterbarkeit

vielerlei Ausgabemedien möglich

Page 114: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Fluid

Grundkonzepte

Ausgabelogik ist in View Helpers (Tags) gekapselt

{namespace f3=F3\Fluid\ViewHelpers}<f3:link action=“someAction“>Administrationsoberfläche</f3:link>

Fluid Core enthält keine Ausgabelogik!

Namespace-Deklaration

Aufruf eines Tags

Page 115: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

<f3:...>

Jeder Tag ist eine Klasse!

Page 116: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

{namespace f3=F3\Fluid\ViewHelpers}

<f3:link>...</f3:link>

F3\Fluid\ViewHelpers\LinkViewHelper

Page 117: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

{namespace f3=F3\Fluid\ViewHelpers}

<f3:form.textbox />

F3\Fluid\ViewHelpers\Form\TextboxViewHelper

Page 118: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Fluid

Grundkonzepte

Variablen

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

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

Page 119: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Fluid

Grundkonzepte

Object Accessors

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

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

Getter / Setter werden automatisch aufgerufenGeht auch weiter

verschachtelt

Page 120: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Fluid

Grundkonzepte

Arrays

<f3:link action=“show“ arguments=“{id: blog.id, name: ‘Hallo’}“>Posting anzeigen</f3:link>

JSON-Objektsyntax

Page 121: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Ein Beispiel

Page 122: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
Page 123: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Fluid

Layouts

Page 124: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Fluid

Schleifen

Page 125: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Fluid

Autovervollständigung

Page 126: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
Page 127: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
Page 128: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Fluid

Autovervollständigung

Generierung von XML Schema aus Quellcode-Kommentaren

funktioniert damit in allen XML-fähigen Editoren (z.B. Eclipse)

Page 129: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Fluid

Aufbau

Fluid Core

TemplateView View Helpers (Tags)

Page 130: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Fluid

Backport

Fluid wird in TYPO3 4.4 integriert

warscheinlich: Standalone-Lösung

Page 131: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Fluid

Nächste Schritte

Caching

Tag-Library dokumentieren und ausbauen

Portierung auf TYPO3 v4

Page 132: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Work in Progress

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

Page 133: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

We need help!http://www.sxc.hu/photo/1132907

Page 134: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Fluid

Weitere Informationen

http://forge.typo3.org/projects/package-fluid

https://svn.typo3.org/FLOW3/Packages/Fluid

Page 135: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
Page 136: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

FLOW3 - der aktuelle Stand

Page 137: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Progress

Developing TYPO3 5.0 ...

Progress

Page 138: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Der aktuelle Stand

AOP

Object

Configuration

Cache

Error

Event

0 25 50 75 100

Page 139: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Der aktuelle Stand

Locale

Log

MVC

Package

Persistence

Property

0 25 50 75 100

Page 140: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Der aktuelle Stand

Reflection

Resource

Session

Utility

Validation

0 25 50 75 100

Page 141: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Nächste Schritte

erste FLOW3-Beta: In den nächsten 1-2 Monaten

erste Pilotprojekte: jetzt

Weiterentwicklung des CMS

Geplanter Beta-Release von TYPO3 5.0: Ende 2009

Page 142: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Wir suchen...

Fluid-Mitentwickler, Tester, ...

FLOW3-Entwickler

(bald) TYPO3 5.0 Mitentwickler

Page 143: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Weitere Informationen

http://flow3.typo3.org

http://flow3.typo3.org/documentation/reference

https://svn.typo3.org/FLOW3/Distribution/trunk

https://svn.typo3.org/FLOW3/Distribution/branches/BlogExample

Page 144: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Inhalt

TYPO3 - Einführung

FLOW3

Fluid - The Zen of Templating

Synergien TYPO3 v4 und v5

Test Driven Development

Dependency Injection

Aspektorientierte Programmierung

Domain Driven Design & MVC

Page 145: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Synergien TYPO3 v4 und TYPO3 v5

Page 146: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Sollte ich überhaupt noch auf TYPO3 v4

setzen?

Page 147: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

- Ja. -

Page 148: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Ich bin verunsichert.Was ist mit dem Aufwand,

den ich in TYPO3 v4 gesteckt habe?

Page 149: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

TYPO3 Transition Days

Page 150: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
Page 151: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
Page 152: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
Page 153: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
Page 154: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

TYPO3 Transition Days

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

Page 155: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

TYPO3 Transition Days

The Berlin Manifesto

We, the participants of the T3TD08 state that ...

TYPO3 v5 will be the successor to TYPO3 v4

Migration of content from TYPO3 v4 to TYPO3 v5 will be easily possible

Page 156: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

TYPO3 Transition Days

The Berlin Manifesto

We, the participants of the T3TD08 state that ...

TYPO3 v5 will introduce many new concepts and ideas. Learning never stops and we'll help with adequate resources to ensure a smooth transition.

Page 157: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
Page 158: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

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 159: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

TYPO3 v4 Entwickler TYPO3 v5 Entwickler

TYPO3-Entwickler

Page 160: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

[ Video-Ausschnitt aus dem T3CAST ]

Page 161: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Synergien

Gemeinsame Roadmap

Page 162: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Synergien

MVC-Framework in 4.3

Das FLOW3-MVC-Framework wird auf Version 4.3 portiert

Ziele:

Neue Konzepte erlernbar machen

Schon jetzt mit „FLOW3-Paradigmen“ programmieren

Page 163: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Synergien

Fluid in 4.4

Fluid wird für Templates und Extension-Entwickler zur Verfügung stehen

Automatische Konvertierung vom Fluid-Kern

An TYPO3 v4 angepasste Tags

Page 164: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

Folien auf http://tug-dresden.de

Page 165: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

Inspiring people toshareFLOW3 - der aktuelle Stand

?????????????

Page 166: FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden

inspiring people to share.