Aloha,
When you create different libraries and components you find yourself writing the same code in different places over time. In principle that's ok, except you combine those libraries and components. In this case you suddenly have the same classes twice or even more often in your code base. When I started creating Medusa, TilesFX and Charts I did not really think about the possibility to combine those libraries in one project at some point in the future. The main reason for this is that I never plan to create those libraries but they simply grow from components to libraries over time.
The thing that started me thinking about to re-use more code between those libraries was a project where I needed TilesFX and Charts in the same project. Both of these libraries came with a Country class with different properties and methods. Now in that project I needed both of them and I needed to write some ugly code to convert between them
That was the starting point of the Countries library which you can now find either on github and on maven central.
But then I saw that there are other classes that I more or less use in both libraries and I decided to put those shared classes in a separate project. Because there are projects that use JavaFX and others which don't, I decided to create two projects:
- eu.hansolo.toolbox
- eu.hansolo.toolboxfx
Toolbox:
This library contains the code from my Evt project, meaning to say an event system which is similar to the JavaFX events.
Then I also added the code from my Properties project to the Toolbox. The properties are very similar to the JavaFX properties incl. binding. And in the Toolbox they will use the Evt events for property changes.
There are now also tuples in the Toolbox which sometimes can come in handy. They are not that fancy and their getters and setters do look like getA(), get(B) and setA(), setB(). Not so nice but useful.
The last thing I've added is the code from my UnitConverter which contains all kinds of different units and a converter that can convert between them (in the same category e.g. Temperature).
Then there is a Helper method that contains all sorts of methods that I use here and there in my code e.g. clamp() etc.
ToolboxFX:
Then there is the ToolboxFX library which depends on JavaFX but that does not only contain JavaFX related stuff. Here you will find things like my ConicalGradient, FontMetrix, GradientLookup, the Fonts that I do use often and other stuff like Point, Bounds, CornerRadii, Dimension, Location Po, CatmullRom etc.
ToolboxFX depends on Toolbox so you need to add Toolbox too if you use ToolboxFX.
This is stuff that I use a lot in the Charts library but also in TilesFX and Medusa.
But that's not enough, I've also separated the HeatMap from Charts and Countries and put it in a separate project.
So what does that mean for you as a user of one of my libraries?
- Update your dependencies
- TilesFX depends on:
- eu.hansolo:toolbox:17.0.6
- eu.hansolo:toolboxfx:17.0.15
- eu.hansolo.fx:heatmap:17.0.3
- eu.hansolo.fx:countries:17.0.16
- Medusa depends on:
- eu.hansolo:toolbox:17.0.6
- eu.hansolo:toolboxfx:17.0.15
- Charts depends on:
- eu.hansolo:toolbox:17.0.6
- eu.hansolo:toolboxfx:17.0.15
- eu.hansolo.fx:heatmap:17.0.3
- eu.hansolo.fx:countries:17.0.16
- Use the new event system
- If you make use of things like TileEvent, you should change to TileEvt etc. The best way to see how it works is to take a look at the Demo classes within the library source code.
No comments:
Post a Comment