Camada de Domínio

A camada de domínio ou de lógica de negócio do programa a desenvolver deve conter a concretização das entidades da área de aplicação do programa em causa (designado como domínio da aplicação). Neste exemplo, o domínio é muito simples. A aplicação a desenvolver tem que manter o conjunto de números inteiros inseridos pelo utilizador, mantendo o número de vezes que cada número foi inserido. Deve ainda ser mantido a ordem pela qual cada número foi inserido pela primeira vez. Assim, vamos ter duas classes concretizadas na camada de domínio (representada pelo package ex.core):
  • uma que representa um número inserido e mantém ainda o número de vezes que o número já foi inserido, designada como Number
  • e outra que mantém os números já inseridos e preserva a ordem de inserção, designada como Sequence.
A classe Number (concretizada nesta subsecção) representa um número inteiro e deve ter a seguinte funcionalidade:
  • Incrementar/decrementar o número de vezes do número
  • Obter o número de vezes do número
  • Verificar a igualdade entre dois números, em que dois números são iguais se representarem o mesmo número inteiro
A classe Sequence (concretizada nesta subsecção) mantém a sequência de números inseridos pelo utilizador. Para guardar esta sequência de números podemos utilizar uma colecção do tipo Set ou List. Tendo em conta que é necessário preservar a ordem de inserção, então devemos escolher o tipo List. Esta classe deve ter a seguinte funcionalidade:
  1. Guardar a série de números inteiros inseridos pelo utilizador;
  2. Permitir adicionar e remover um número à série;
  3. Obter a série de números com a mesma ordem com que foram inseridos pela primeira vez.
  4. Obter o número total de número inseridos pelo utilizador e o número total de números distintos inseridos pelo utilizador.
Tal como dito anteriormente, a lógica de negócio da aplicação deve estar concretizada na camada de lógica de negócio. A camada de serviços não deve concretizar lógica de negócio para evitar possível duplicação de código e ter uma melhor qualidade no desenho da aplicação dado que a lógica que diz respeito a uma classe deve estar concretizada nessa classe e não noutra classe qualquer. Por exemplo, a regra de negócio que quando o número de vezes de um número é 0, então o número deve ser removido da série de inteiros deve estar concretizada no método da classe Sequence que remove um número à série e não no comando que é executado quando o utilizador escolhe a opção de remover um número. Isto permite localizar facilmente a verificação de uma regra de negócio num único sítio (numa determinada classe do domínio) em vez de ter a verificação da regra duplicada em vários comandos onde a regra possa ser violada. 

Note-se que as entidades da camada de lógica de negócio não devem referir-se a entidades relacionadas com a interacção com o utilizador por forma a serem completamente independentes da interacção com o utilizador, permitindo assim que se possa alterar completamente a camada de apresentação sem ter qualquer impacto na concretização da camada de domínio.