Infrastructure

Criaremos um pacote (infraestructure). Dentro dele teremos dois pacotes: gateways e persistence.

Essa classe irá interagir com o Repository do SpringData (aquele que a gente geralmente cria no pacote repositores que extends JpaRepository). Basicamente, daremos um CTRL C + CTRL V. Fazendo uma copia do UserRepository para dentro do pacote persistence.

Assim que colocaremos o Repository do SpringData dentro do pacote persistence, poderemos importar ele para dentro da classe UserRepositoryGateway e criaremos um construtor para injetá-lo.

Para que o repository do SpringData não dependa do User inicial (entidade do banco), dentro do pacote Persistence criaremos um UserEntity contendo todas as características do User inicial, e assim poderemos usar anotações tanto do JPA quanto do SpringData.

Então o UserRepository de persistence, não apontará mais para <User>, e sim <UserEntitity>.

No gateway, precisaremos gerar essa UserEntity a partir de um Usuário de domínio (a classe User inicial).

Para fazermos isso e centralizar esse código, criaremos uma classe Mapper Veja aqui

Nele, teremos um método que retornará um UserEntity e um User.

  • UserEntity - O parâmetro passado, é o User inicial (classe domain).

Como passaremos os atributos no retorno desse método, criaremos um construtor na classe UserEntity. Mas sem o Id, pois ele será gerado automaticamente pelo Banco.

  • User - O parâmetro passado é o UserEntity (do pacote persistence)

E retornaremos um novo User passando os atributos do UserEntity.

Atualizado