Parabéns pelo artigo Alex!
Você poderia me ajudar com algumas dúvidas?
Vamos supor que eu precise combinar diferentes repositório para gerar uma a saída de uma página, ou seja, terei uma lógica de construção para a mesma.
Na camada de App Services eu chamo esse repositórios e combino seus resultados para gerar a saída. Tentarei criar um cenário fictício
Exemplo:
Cenário: cadastro de aluno projetos científicos
Minha página possui um campo para informar o nome e descrição do projeto científico. Adicionalmente, possui uma lista de Alunos que seriam um dos possíveis donos do projeto. Ao selecionar um Aluno, algumas informações (CPF, Endereço ..) serão preenchidas automaticamente.
Portante, suponha que eu tenha os seguintes Repositórios:
- AlunoRepositorio
- ProjetoCientificoRepositorio
ObS: Projeto possui um IdAluno
Se é um novo cadastro:
A tela ficará vazia e só terá a lista preenchida
Se for uma edição:
A tela será carregada com todas informações já cadastradas.
Para eu gerar minha página de cadastro, preciso combinar ambos repositórios.
Os Repositórios serão chamados na camada de Serviço
ProjetoCientificoAppService
var projeto = ProjetoCientificoRepositorio.GetById(id);
var alunos= AlunoRepositorio.GetAll();
Agora surge minha dúvida
- Como construir a saída para essa tela?
Devo criar um DTO/PageResult específico para essa tela?
Se sim, esse objeto deve ser criado a partir de um AutoMapper ou de uma Factory?
Usando Factory para gerar essa saída
Implementação 1: passando os objetos
ProjetoCientificoResultFactory
CriarProjetoCientificoResult (projeto, alunos){
… ProjetoCientificoResult
return ProjetoCientificoResult;
}
Implementação 2: passando os Reporitórios
ProjetoCientificoResultFactory
CriarProjetoCientificoResult (ProjetoCientificoRepositorio, AlunoRepositorio){
…
return ProjetoCientificoResult;
}
Implementação 3: Usando AutoMapper
var saida = Mapper<ProjetoCientificoResult>(projeto, alunos)
Conseguiu entender?
Poderia me sugerir uma solução?
Grato
