Depois de ter montado o Domain Model baseado nas regras de negócio do cliente, foi pedido que fosse possível adicionar novos “campos” as “telas” do sistema.
Também tem que ser possível selecionar quais campos ele quer que aparece na interface, indicar campos requeridos etc.
Essa personalização acabou matando o meu Domain Model já que o sistema virou basicamente um template para outros sistemas.
Essa personalização da interface não chega a ser problema, o que está pegando vai ser essa possibilidade do usuário adicionar novos campos dinâmicamente.
Esse tipo de estrutura é comum em CMSs.
Tanto que uma idéia que me veio a cabeça agora seria a de usar um CMS que possua uma boa api para acesso externo como “base de dados”.
O SharePoint da Microsoft, o único CMS que conheço, me permite ter acesso completo a sua estrutura através de uma api.
Eu deixaria campos core na tabela. E Faria ter um campo representando o documento XML, como um serializable. E a definição deste registro é um Schema, provavelmente via Relax NG.
Deixa em um dir de configuração e fornece um base. Deve bastar, não?
Será que matou ou será que o domínio é outro? Qual o domínio da aplicação? Será que os objetos deste domínio não possuem como parte do seu estado estes campos definidos pelo usuário?
Se o que muda são os dados do objeto, o usuário quer poder adicionar mais este e este atributo, acredito que o problema se resolve simplesmente na modelagem, talvez mudando o foco do domínio.
Se o objeto muda de estado e comportamento aí sim temos uma complexidade bem grande, mas acredito que não seja o caso porque caso fosse seus usuários teriam que cotnar com alguma forma de programar os novos estados do objeeto, pela sua descrição eu diria que são apenas objetos com mais ou menos dados de acordo com o gosto do freguês.
O sistema nasceu como um controle de Processos só que o cliente viu que simplesmente mudando o nome de algumas tabelas e adicionando novos campos ele poderia usar a mesma estrutura em outros sistemas.
O que nasceu como um sistema virou praticamente um produto.
A idéia é que o Core seja implementado sem regras de negócios e comportamento e estado sejam controlados pela interface.
Um serviço genérico que possa ser personalizado somente alterando a sua interface.
Como você disse, o que mudou foi o domínio do sistema.
Vou dar uma olhada no JBoss. O maior problema é que o projeto é em .NET :oops:
Antes de ser amaldiçoado :D, só trouxe essa minha dúvida porque faz tempo que acompanho o fórum de metodologias e tenho visto ótimas discussões de DDD.