Recentemente, tenho lido os Padrões de Integração Empresarial de Hohpe e Woolf, alguns dos livros de Thomas Erl sobre SOA e assistido a vários vídeos e podcasts de Udi Dahan et al. nos sistemas CQRS e Event Driven.
Os sistemas no meu local de trabalho sofrem com alto acoplamento. Embora cada sistema teoricamente tenha seu próprio banco de dados, há muitas junções entre eles. Na prática, isso significa que há um enorme banco de dados usado por todos os sistemas. Por exemplo, há uma tabela de dados do cliente.
Muito do que li parece sugerir dados desnormalizados para que cada sistema use apenas seu banco de dados, e quaisquer atualizações em um sistema sejam propagadas para todos os outros usando mensagens.
Eu pensei que essa era uma das maneiras de impor os limites em SOA - cada serviço deveria ter seu próprio banco de dados, mas então li o seguinte:
/programming/4019902/soa-joining-data-across-multiple-services
e sugere que esta é a coisa errada a fazer.
Segregar os bancos de dados parece uma boa maneira de dissociar os sistemas, mas agora estou um pouco confuso. Este é um bom caminho a seguir? É sempre recomendável que você separe um banco de dados, digamos, um serviço SOA, um contexto delimitado por DDD, um aplicativo etc.?