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

Reply via email to