Ao estudar o design controlado por domínio (DDD), deparei-me com o conceito de subdomínio, mas acho que ainda não o entendi. Meu primeiro entendimento disso foi que um subdomínio é um subconjunto do domínio do aplicativo. Em outras palavras, é uma partição do espaço do problema. Eu li que existem três tipos de subdomínio:
- subdomínios principais
- subdomínios de suporte
- subdomínios genéricos.
Meu entendimento foi mais ou menos assim: escolhemos o domínio do aplicativo, e ele é bastante complexo. Depois, analisamos e descobrimos uma maneira de particioná-lo em partes mais simples, algumas das quais seriam subdomínios principais e outras seriam de suporte, enquanto outras seriam genéricas.
Ao procurar mais informações, encontrei pessoas dizendo algo diferente: existe apenas um subdomínio principal, juntamente com alguns subdomínios genéricos e nenhum subdomínio de suporte.
Então, minhas perguntas são:
- O que são subdomínios, realmente ? Meu primeiro entendimento é o correto ou é a segunda coisa que eu leio?
- Como essa ideia de subdomínios é útil?
- Quais são alguns bons critérios para identificar subdomínios? O que devemos ter em mente ao decidir sobre subdomínios, a fim de fazer melhor uso dessa idéia?
EDIT: Pesquisando um pouco mais, encontrei o seguinte:
Pense em um sistema de comércio eletrônico. Inicialmente, você pode dizer que é uma aplicação de um contexto de compras. Se você olhar mais de perto, verá também outros contextos, como estoque, entrega, contas etc.
Isto é o que eu pensava inicialmente que era um subdomínio. Escolhemos um domínio (o domínio de compras) e o dividimos em subdomínios mais simples (inventário, entrega, contas etc.). Mas no texto em questão, eles se referem a eles como contextos. Então, meu antigo entendimento não é subdomínios, mas contextos?
Encontrei uma pergunta aqui neste site sobre a diferença entre um subdomínio e um contexto limitado. A resposta afirma que os subdomínios são uma partição do espaço do problema, enquanto os contextos são partições do espaço da solução. No entanto, separar o contexto de compras em estoque, entrega, contas etc. não é uma partição conceitual. Ou seja, está no espaço do problema e não no espaço da solução?