Der wichtigste Fortschritt von FLOW3 ist es, neue Paradigmen zu befolgen, die so vorher in der PHP-Welt nicht bekannt waren. Diese neuartigen Herangehensweisen an die verschiedensten Herausforderungen einer browserbasierten Applikation machen es möglich, auch in Zukunft flexibel und kostengünstig auf neue Anforderungen reagieren zu können.

Domain Driven Design (DDD)
Das wichtigste Konzept hinter DDD ist die "Konzentration auf das Wesentliche". Das Wesentliche im Zusammenhang mit Software stellt dabei die eigentliche Aufgabe des Systems dar, also was wollen Sie mit dem Produkt erreichen, welche Probleme soll es für Sie lösen?
Mit DDD wird es nun möglich, sich auch bei der Entwicklung auf die Lösung Ihrer Probleme zu beschränken und nicht auf die Lösung technischer Probleme wie das Speichern von Daten oder sonstige notwendige Infrastruktur. Dieser Ansatz macht nicht nur die Entwicklung deutlich effizienter, sondern legt den Fokus auf das eigentliche Ziel der Software. Technische Infrastrukturen stehen im Hintergrund, dafür gibt es Frameworks wie FLOW3.
Weitere Details finden Sie unter http://domaindrivendesign.org/.
Test Driven Development

Testen gehört zu den wichtigsten Instrumenten der Qualitätssicherung. Test Driven Development integriert dies direkt in die Entwicklung und stellt somit sicher, dass von Beginn an weniger Fehler im System entstehen, was den Entwickler dabei unterstützt, sein eigentliches Ziel nicht aus den Augen zu verlieren.
Der Prozess sieht dabei sehr einfach aus:
- Es wird ein Test geschrieben, der ein zu lösendes Problem (Anforderung) testet
- Nachdem dieser Test fehlschlägt wird das Problem gelöst
- Der Test sollte nur korrekte Ergebnisse liefern
Dadurch, dass nicht nur ein Test für eine Anforderung geschrieben wird, sondern viele sogenannte Unit-Tests die Einzelteile der zu entwickelnden Komponente abtesten, ist sichergestellt, dass auch bei nachträglichen Änderungen an der Komponente potentielle Regressionen schnell auffallen.
Continuous Integration
Gerade in Projekten, in denen viele Entwickler an einem System arbeiten, ist es absolut wichtig, dass die verschiedenen Komponenten der Einzelpersonen am Schluss auch wie geplant zusammenspielen. Continuous Integration beschreibt hierbei den Prozess, Zwischenergebnisse möglichst oft zusammenzuführen und in ihrer Gesamtheit gemeinsam zu testen. Somit wird sichergestellt, dass jederzeit an einer insgesamt funktionsfähigen Software gearbeitet wird und die verschiedenen Komponenten nicht "aneinander vorbei" entwickelt werden.
Aspect Oriented Programming (AOP)
Die aspektorientierte Programmierung bietet eine Lösung für Probleme, die in der Objektorientierung auftreten. Grundsätzlich versucht man, verschiedene Belange oder Aufgaben (sogenannte "Concerns") eines Systems in der Objektorientierung in verschiedene Objekte zu kapseln.
So gut dieser Ansatz ist, so schlecht lassen sich damit sogenannte "Crosscutting-Concerns" bewältigen. Diese Crosscutting-Concerns sind Programmteile, die nicht in ein Objekt gekapselt werden können, weil sie an vielen verschiedenen Stellen des Systems benötigt werden. Eines der populärsten Beispiele hierfür sind Sicherheitsroutinen. Sicherheitsabfragen werden überall im System benötigt, sie lassen sich also nicht einfach in ein Objekt an einer Stelle kapseln.
Genau an dieser Stelle setzt die Aspektorientierung an. Sie kapselt z.B. Sicherheitsabfragen an einer zentralen Stelle und webt sie dann an den entsprechenden Stellen dynamisch in das System ein. Der Entwickler muss diese Sicherheitschecks nur einmal zentral implementieren und definiert dann, an welchen Stellen sie durchgeführt werden müssen. Der Rest wird vom Aspekt-Container, also dem Framework der Aspektorientierung, erledigt.




