I don't see much advantage to merging the components in the applications folder, but merging components in the framework folder is sorely needed.

-Adrian


Quoting Jacopo Cappellato <jacopo.cappell...@hotwaxmedia.com>:

I think I already mentioned this in the past, and I know it may sound a bad idea. Also, this is not really a "proposal", just an imperfect idea that needs to be better defined. However I think it makes sense to share this with you in order to get some feedback.

Idea: merge all the "application" components into one ("ofbizerp" or similar). This component will have all the entity definitions, all service definitions and their implementations and will also have all the webapps.

The main motivation for this proposal is a reality check, after all these years of life of the project: it doesn't really make much sense to keep the application components separated, and it is currently mostly impossible to deploy a working system with a subset of them.

In fact, even if it is true that there are components that do not depend on others at compilation time, they mostly all depend on each other at runtime.

For example:
the "accounting" component depends on the "order" component at compilation time; the "order" component doesn't depend on the "accounting" component at runtime. However, the "order" component is independent from the "accounting" component only if we look at the subset of service implemented in Java; there is no guarantee, nor best practice, that prevents the "order" component to depend on:
* entities
* services
* Minilang code
* scripts (Groovy etc.)
* data
* other resources (labels, configurations, etc.)
* screens, forms and Freemarker templates

Is this bad design? Maybe not. There are so many entities and services that do not really belong to a component; for example, the "BillingAccount" entity is defined in "accounting" but it is widely used by "order" code.

I understand this is a big change, but I feel like it can be done in incremental steps in the trunk. I also see a big potential for cleaning a lot of code, removing redundancies and ending up with a simplified architecture (that may be easier, for example, to deploy to external application containers).

Jacopo





Reply via email to