Nella nostra azienda, gestiamo tre prodotti, che sono abbastanza simili, in 2 progetti.
Tutto Java, usando Maven per le dipendenze.
Questi tre prodotti si sono evoluti da un altro progetto, che ora è una dipendenza di entrambi i progetti.
I progetti A e B sono così simili, che essenzialmente ogni correzione di bug per A deve essere copiata o unita per il progetto B.
I sapori del progetto B, d'altra parte, descrivono differenze molto distinte nel comportamento tra questi due. Ad esempio altri elementi in un menu del tasto destro. Questo è stato ottenuto da mostri brutti se-altrimenti-mostri, che sono in parte svaniti a favore di un approccio più OOP, ma ora portano ad un altro problema: dove organizzare queste classi dipendenti dal sapore?
Al momento, distribuiamo i nostri progetti con i profili per le diverse build di maven.
Il nostro obiettivo è unire entrambi i progetti (eventualmente anche con il progetto di base) in uno con sapori distinti.
La mia domanda ora è: come organizzarlo?
Il nostro approccio principale è quello di migliorare il Progetto B con le caratteristiche del Progetto A definendo un terzo gusto per il Progetto B e lasciare A gradualmente superfluo, in modo che le nostre correzioni di bug debbano essere fatte in un solo posto.
Quindi abbiamo immaginato la nostra struttura del progetto più o meno così:
tld.company.project.<all of the logics with dependency injection>
tld.company.project.flavor.<flavor 1>.<implementations>
tld.company.project.flavor.<flavor 2>.<implementations>
tld.company.project.flavor.<flavor 3>.<implementations>
All'interno della logica aziendale, dovremmo quindi iniettare un XyHandler
, che è implementato in ogni sapore e verrà popolato dal nostro bean.xml
Questo sembra essere mantenibile? O anche desiderabile? Ogni idea è ben accetta!
Il codice base comune è così enorme, dobbiamo trovare un modo per combinare questi due progetti.