Melhorar arquitetura

Pessoal,

Compramos os fontes de um sistema (swing) e agora estamos precisando melhorar a arquitetura dele para melhor organização e modularização.
Com essa separação temos os seguintes projetos:

1 - Commons (classes utilitarias comuns) -> (Usado por Comps e Sistema-Xpto)
2 - Comps (componentes swing) -> (Usa Commons e Usado por Sistema-Xpto)
3 - Sistema-Xpto (o sistema em si) -> (Usa Commons e Comps)

Estou com o seguinte problema: No projeto “Comps” alguns componentes definem uma interface que o “Sistema-Xpto” implementa fazendo o componente ter o comportamento necessário a sua necessidade, por exemplo no “Comps” é definido uma interface Menu, que o “Sistema-Xpto” implementa (MenuImpl) com os menus específicos dessa aplicação.
Só que no “Comps” tem outro componente que precisa da lista de menus (definido pela MenuImpl) para poder exibi-los na tela.

Qual seria a melhor forma desse componente de “Comps” que precisa da lista de menus (no caso de Sistema-Xpto) ter essa informação?

Att

Falou em modularização eu logo penso em OSGi…e falou em Desktop eu já penso no Eclipse RCP.

No seu caso, onde seria praticamente inviável trocar tudo pra Eclipse RCP agora, eu faria uma estrutura de plugins. A aplicação Xpto, então, teria que registrar um plugin de menu no Comps. Dessa forma, Comps poderá usar a lista de menus. Dê uma olhada no OSGi, ele pode te ajudar nisso.

[quote=leojribeiro]Pessoal,

Compramos os fontes de um sistema (swing) e agora estamos precisando melhorar a arquitetura dele para melhor organização e modularização.
Com essa separação temos os seguintes projetos:

1 - Commons (classes utilitarias comuns) -> (Usado por Comps e Sistema-Xpto)
2 - Comps (componentes swing) -> (Usa Commons e Usado por Sistema-Xpto)
3 - Sistema-Xpto (o sistema em si) -> (Usa Commons e Comps)

Estou com o seguinte problema: No projeto “Comps” alguns componentes definem uma interface que o “Sistema-Xpto” implementa fazendo o componente ter o comportamento necessário a sua necessidade, por exemplo no “Comps” é definido uma interface Menu, que o “Sistema-Xpto” implementa (MenuImpl) com os menus específicos dessa aplicação.
Só que no “Comps” tem outro componente que precisa da lista de menus (definido pela MenuImpl) para poder exibi-los na tela.

Qual seria a melhor forma desse componente de “Comps” que precisa da lista de menus (no caso de Sistema-Xpto) ter essa informação?

Att[/quote]

Porque você não cria um método em Menu com a assinatura:

List<Menu> getMenusFilhos();

se você não quiser alterar a interface para não quebrar outros componentes, você pode ainda estender a interface e criar o método na sub-interface.