For the upcoming issue of the german <link http: t3n.yeebase.com>T3N Magazin, Martin Herr talked to Robert Lemke about FLOW3, the framework behind TYPO3 version 5.
Mr. Lemke, you are the lead developer for the new TYPO3 framework FLOW3. How did FLOW3 come into being?
It's probably all the fault of a very intense developer meeting in northern Denmark three years ago. It was there we decided to base TYPO3 5.0 on a thoroughly reworked architecture and to give that version the code name "Phoenix". One year later we started the necessary preparations and soon realized that the only way to achieve what we had in mind, was a complete rewrite.
In November 2006 I finally started the actual development, which first of all meant a lot of groundwork. If you start from scratch you have to care about a lot of infrastructure for your application: we needed a very flexible component, package and resource manager as well as a lot of other components largely unrelated to the task of our actual product - the CMS. This quickly lead to a framework coming into existence and soon it became apparent that this would not only be useful for TYPO3 but also for a lot of other PHP applications.
At the TYPO3 Conference 2006 we finally announced to release the framework as a separate project to the whole PHP community. With FLOW3 we created a daughter brand that should on the one hand underline the independence of the project, but on the other hand emphasize the connection to the TYPO3 family.
If you look into the open source community, there are a number of PHP frameworks available, e.g. the Zend Framework. Why did you reinvent the wheel, instead of using a proven solution?
In the PHP world, the Zend Framework comes probably closest to FLOW3, and it's a clean, solid product. With TYPO3 5.0, though, we introduce a few development and design principles, that are not supported by other frameworks to the degree needed, and they don't fit their profiles either. One example is Domain-Driven Design. We use that technique to be able to tackle the complexity of our software more easily. But for DDD you need a framework with Aspect-Oriented Programming, Dependency Injection and support for certain persistence mechanisms for objects. With Spring the Java community has a framework which does that - something comparable for PHP is missing, though.
FLOW3 is tailored for rather big and more complex PHP projects. To us it is important though, that a developer gets good results in a short time - also for smaller projects. We as core developers have only done a good job, if the application developer experiences the flow: he is in the flow, completely absorbed in his task, is not stopped by anything and keeps his goal in mind all the time.
DDD, AOP in PHP, CR on JSR standard and rigid programming guidelines: how do you want to give PHP developers an understanding of your concepts?
Programming guidelines are simply needed for a stable, secure and easily readable code base. To support developers in adopting those gudielines, we developed tools for unit testing, continuous integration and quality control which help to detect and eliminate deviations from those guidelines. To introduce the paradigms (DDD, AOP/DI, MVC, ...) and help with understanding their actual use, we created a FLOW3 website explaining them. In the reference, API and articles dedicated to the topic we show how those principles work - as techniques like DDD are nothing less than a shift of paradigms, a different approach to realizing software projects. An important concern of DDD is to focus on the actual logic of the application and treat the infrastructure separately. I have spent, like most web developers, most of my time programming forms, list views and security checks. The really interesting task, namely finding a solution for the specific problem of your client, is often neglected. But if you can concentrate on this task and the framework provides the infrastructure you need, you not only have a lot of fun working on it, but also produce more and cleaner code in less time.
What main problems do you see concerning the continuing development of the FLOW3 framework and how do you plan to get a grip on them?
A big challenge at the moment is to persist objects as transparent as possible in our content repository. Fortunately there exist a lot of diverse examples and patterns we can use. But as much as we are excited about FLOW3, we must not forget to push forward the development of TYPO3 5.0 - because that is our main assignment. In the end FLOW3 will benefit from all of that, because this way we only implement what is really necessary.
What does DDD mean for you personally? Are already you using your theoretical knowledge in day-to-day work as a freelancer?
Fortunately not all of the principles of DDD are new, they were simply tied together and reformulated in a very meaningful manner. In that respect I have used these techniques for many years. Really consciously I have been adopting DDD for one and a half years in my projects - with growing enthusiasm.
Did you already get any feedback about FLOW3 from the PHP community? How are the reactions?
Especially after my talk at the PHP Conference 2007 I have had a lot of positive feedback about FLOW3. Those I talked to had the opinion that we are lacking such an "enterprise" framework in the PHP world. However, a few have shook their heads in disbelief because they find the project too ambitious.
When will it be possible to use FLOW3 for your own projects?
Our plan is to release a snapshot this spring, by which you can play around and get some experience with FLOW3 - also with respect to using it for TYPO3 version 5. Amount and order of what functionality will be implemented is governed mostly by what we need for our CMS. However, for the second half of this year version 1.0 is planned.