Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Estaria correto implementar a conversão dos objetos da maneira abaixo?

Seria correto tb implementar funções dentro da model para "converter", como no exemplo abaixo? É menos trabalhoso e evita criar várias classes "mappers" para várias entidades.

package br.com.forum.model

import br.com.forum.dto.TopicoDto
import br.com.forum.dto.TopicoView
import br.com.forum.model.enum.StatusTopico
import java.time.LocalDateTime

data class Topico(
    val id: Long? = null,
    val titulo: String,
    val mensagem: String,
    val dataCriacao: LocalDateTime = LocalDateTime.now(),
    val curso: Curso,
    val autor: Usuario,
    val status: StatusTopico = StatusTopico.NAO_RESPONDIDO,
    val respostas: List<Resposta>? = ArrayList(),
)

fun Topico.TopicoView() = TopicoView(
    id = id,
    titulo = titulo,
    mensagem = mensagem,
    dataCriacao = dataCriacao,
    status = status
)

fun Topico.ToDto() = TopicoDto(
    id = id,
    titulo = titulo,
    mensagem = mensagem,
    cursoId = curso.id,
    autorId = autor.id
)

fun TopicoDto.ToDomain() = Topico(
    id = id,
    titulo = titulo,
    mensagem = mensagem,
    curso = Curso(
        id = cursoId,
        nome = "",
        categoria = ""
    ),
    autor = Usuario(
        id = autorId,
        nome = "",
        email = ""
    )
)

fun TopicoView.ToDomain() = Topico(
    id = id,
    titulo = titulo,
    mensagem = mensagem,
    curso = Curso(
        id = cursoId,
        nome = "",
        categoria = ""
    ),
    autor = Usuario(
        id = autorId,
        nome = "",
        email = ""
    )
)
2 respostas
solução!

Oi Gustavo,

É uma opção válida e evitaria os mappers, mas a desvantagem seria "poluir" as classes de dominio da aplicação com conversões de objetos DTO.

Sim, "polui" mesmo, porém, concentra possíveis alterações em apenas 1 lugar.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software