Estou com sérias dúvidas sobre o design do meu aplicativo Web.
Eu queria separar a lógica de negócios da interface, então criei uma API da Web que lida com todas as solicitações ao banco de dados.
É uma API da Web do ASP.NET com estrutura de entidade e uma unidade de trabalho e padrão de repositório genérico. Até agora, tudo está bem.
PROBLEMA
Onde eu preciso de ajuda é que não consigo descobrir uma maneira eficiente de compartilhar objetos entre a API e o aplicativo.
Não quero serializar diretamente o objeto da entidade, pensei que seria uma prática ruim porque, se o modelo da entidade mudar, eu poderia acabar serializando objetos grandes sem motivo.
Como é implementado agora
Como minha interface é um aplicativo Web do ASP.NET em C # e minha API está em C #, criei uma biblioteca comum com a definição de todas as minhas classes que quero compartilhar entre elas.
Sei que a solução não funcionará quando desenvolver um aplicativo para Android. Terei que criar minhas aulas novamente em Java, mas esse não é o meu maior problema.
O problema é que sinto que estou sempre convertendo meus objetos.
EXEMPLO
Aqui está um exemplo do meu fluxo de trabalho:
Começo com um modelo com todos os objetos e as anotações de dados para o meu formulário, em seguida, o usuário colocaria esse modelo em um controlador.
No controlador, tenho que converter esse modelo em uma classe na minha biblioteca comum e depois enviar esse objeto para minha API.
Em seguida, um controlador na minha API captura a chamada e converte esse objeto em um objeto de entidade para atualizar o banco de dados.
Então eu tenho 3 aulas
- O modelo para a visualização com todas as anotações de dados para a validação (Cliente)
- As classes de biblioteca comuns para compartilhar os objetos (DLL)
- As classes de entidade (API)
Tenho a sensação de que faço algo realmente errado. Existe algo mais elegante? Gostaria de ter uma boa solução para esse problema antes que o projeto fique grande demais.