TodoMVC for JavaFX
javajavafxIn the JavaScript world there are thousands of libraries and frameworks available for you to use for your next application. And with plenty of choice there comes the agony of choice. Before you can even think about choosing the "best" framework you need a set of frameworks that you will take a closer look at in the second step. To get a first impression of a framework and to help you decide which framework is worth a closer look, one starting point is the TodoMVC project. It contains the same simple task management app created with different Web/JavaScript frameworks.
It's not a real-world application and ignores lot's of topics that are important for a typical web application. But it gives you a basic idea of the core principles and approaches of each framework and the differences between the frameworks. Another nice aspect of TodoMVC is that you can see a basic project setup for the framework of your choice. The TodoMVC app is neither too trivial (like the typical "hello world") nor is it too complex to understand the code anytime soon.
The idea to have a small set of requirements that are implemented with different approaches, libraries and frameworks isn't only limited to JavaScript frameworks but would be useful in other domains like JavaFX too.
For this reason I've started a "TodoMVC JavaFX" Project. Let's create the same app with different JavaFX frameworks! You can find the repository of the project on Github:
https://github.com/manuel_mauky/todomvcFX
The first idea to start this kind of project came to me after a talk I gave at the Java User Group Görlitz on "UI Design Patterns". In this talk I was comparing several MVC variants by implementing the same app with each pattern (here you can find the code).
Some time later I was creating a Todo example app for mvvmFX which I later used as starting point for the TodoMVC JavaFX project.
At the moment there are 3 implementations: First there is a "reference implementation" that only uses pure JavaFX without any framework. It's meant be a reference of how the application should behave and look like. Developers can take FXML, CSS or Java files from it to start with their own implementation.
The second example is the mvvmFX implementation I've mentioned above. The third example uses FluxFX, an experimental library that I've created for a talk on how to implement the Flux architecture with JavaFX.
In the future I will add other examples and I hope that the community will contribute other examples too. At the moment I'm working on an example using the Haskell-like pure functional language Frege and FregeFX.
If you like to add another example with your framework of choice (No matter if you are the author of this framework or just a user) you are very welcome. Just add an issue in the github project so that me and others know you are working on it and so we can discuss your idea. Or simply send a PullRequest :-)
I hope that the gradle build configuration I'm using at the moment works for your framework/language too. If this is not the case please tell me - I'm open to suggestions of how to improve the build process and project setup. You can find more information on how to contribute in the readme file. And of cause I'm also happy to hear if you think there is some information missing or the description could be improved.
To make sure that all examples are fulfilling the requirements I've added a set of TestFX tests. These UI tests are simulating a user interacting with the app. If you've never seen a little more complex TestFX test this might be interesting for you too.
I hope this project will be useful for JavaFX developers out there. Please tell me what you think :-)