Hello Folks, Over the past couple of months I was working heavily on refactoring the start component of the framework and we changed almost every single line of code in it.
I learned a lot and I would like to share some of the experiences and findings: The good -------------- - OFBiz works, the code executes and runs. - There is an insane amount of functionality. - Lots of great ideas and initiatives. - People love and care for OFBiz. The Bad ------------ - The code _barely_ works (very brittle), break one thing and the whole thing goes down. - Dependency nightmares and spaghetti code. - Remember that spaghetti code? They poured cement on it and built even more spaghetti code! - Many abandoned and half-cooked ideas in the code base. Some conclusions --------------------------- - Without a shred of doubt, I believe OFBiz needs code cleaning more than anything else. - We should probably not add more features or functionality. For at least a year we should just clean and clean and clean and clean and clean and clean and clean. - If refactoring is done right, OFBiz can be much faster, much smaller, and much much more robust. - We need help from people; we can within a year's time create something amazing if people pitch in. ideas for refactoring ---------------------------- - The base component needs to be completely refactored with fundamental design changes. - The system containers require heavy, heavy refactoring. - Replace manual multi-threading with the executors framework from java.util.concurrent - Many libraries are sitting there and unused. We need to delete those. - OSGi can transform OFBiz into a different beast, with many of the "component" problems resolved - Many functionalities are much better implemented with 3rd party libraries that did not exist back in 2001 - libraries should not ship with OFBiz, but downloaded through the build script (which only declares dependencies). This would make the size of OFBiz MUCH smaller - ANT, Maven and Ivy need to go away, and replaced with Gradle and the plethora of build scripts all replaced with just one. - if we implement gradle, probably the /tools folder would go away as well. - SVN should probably be replaced with Git. Git was the tool that I used to do the refactoring and I cannot imagine doing the refactoring exercise without it. Sorry for the long post, but I needed to get this out of my head, and maybe help trigger thoughts for other people. Cheers! Taher Alkhateeb