.NET - Diferenças entre Domain e Domain model


 Hoje vamos apresentar a diferença conceitual entre domain e domain model no contexto da TI mais especificamente na área de desenvolvimento de software.

Não é tão simples como parece apresentar as diferenças entre esses termos pois eles possuem diferentes significados para diferentes tipos de pessoas em suas diferentes áreas de atuação. Assim vou procurar me ater ao sentido mais geral e amplamente aceito.

Domain

Um domínio ou domain representa o assunto alvo de um projeto, o problema relacionado a um projeto que desejamos resolver.  Assim um projeto para criar um sistema para gerenciar restaurantes tem como domínio os restaurantes, um projeto para gerenciar hospitais tem como domínio os hospitais.

A construção do domínio é feita pela definição de um conjunto de requisitos e funcionalidades de forma a poder criar a solução para o problema do domínio que o sistema se propõe a resolver.

Naturalmente, este conceito pode ser diferente, sendo mais específico ou mais abrangente, por exemplo, no âmbito do Domain Drive Design o domain é o assunto, o foco , o problema a que se propõe resolver.

Domain model

O Domain model ou modelo de domínio seria o modelo conceitual do domínio, ou seja, o modelo de software do domínio do negócio específico no qual você esta trabalhando. É o resultado da descrição e modelagem em entidades do mundo real e os seus relacionamentos que descrevem de forma coletiva o problema do domínio.

Assim, ao tratar de um sistema para gerenciar restaurantes, cujo domínio são os restaurantes, podemos expressar de forma concreta os conceitos abstratos do domínio materializando-os em um modelo de domínio que expressa de forma conceitual o domínio independente da criação de um sistema de software ou não.

Como exemplo, imagine uma loja. Para essa loja, você deseja construir um novo sistema de Ponto de Vendas (vamos chamá-lo de sistema PV). Um sistema PV é um aplicativo computadorizado usado para registrar vendas e gerenciar pagamentos. Portanto, você se concentra no domínio do sistema PV.

A seguir você vai conceituar os objetos que serão usados para este sistema. Assim, você obterá objetos como: Venda, Pagamento, Registro, Item etc.

Em um modelo de domínio, você modela esses objetos e desenha associações entre eles para que se tenha uma ideia geral de como esse sistema funcionará. (https://stackoverflow.com/questions/1863537/what-is-a-domain-model/53559615)

Um exemplo do modelo de domínio PV será assim:

Podemos pensar em um Domain Model como a representação visual dos objetos que fazem parte do domínio. Se formos usar a UML - Unified Modeling Language - para realizar esta representação teremos um conjunto de diagramas que representam conceitualmente esses objetos.

Pensando em termos de Domain Driven Design temos o conceito de contexto delimitado que é o limite conceitual no qual um modelo de domínio é aplicável.  Assim a modelagem tática é feita dentro de um contexto delimitado usando os blocos de construção do DDD.

E estamos conversados...

"Eu rogo por eles; não rogo pelo mundo, mas por aqueles que me deste, porque são teus.
E todas as minhas coisas são tuas, e as tuas coisas são minhas; e neles sou glorificado."
João 17:9,10

Referências:


José Carlos Macoratti