Mobile App Development · Dart/Flutter
Monte as três camadas do zero para uma entidade Usuario: main() deve apenas montar as camadas e exibir o resultado, sem lógica de negócio.
Desafio 1
Separa responsabilidades em três camadas: a entidade Usuario guarda só o dado (nome); UsuarioRepository fornece uma lista fixa de usuários em memória; UsuarioService recebe o repositório pelo construtor e aplica a regra de negócio de montar um resumo com todos os nomes. main() apenas monta as camadas e exibe o resultado, sem lógica de negócio própria.
// Desafio: separar responsabilidades em três camadas: entidade, repositório e serviço.
// Cada camada tem uma responsabilidade única: dado, acesso a dado e lógica de negócio.
// Entidade: modela o dado mínimo de um usuário.
class Usuario {
final String nome;
Usuario(this.nome);
}
class UsuarioRepository {
// Simula uma fonte de dados em memória.
final List<Usuario> _dados = [
Usuario('Ana'),
Usuario('Bruno'),
Usuario('Caio'),
];
List<Usuario> listar() => _dados;
}
class UsuarioService {
final UsuarioRepository repository;
UsuarioService(this.repository);
String resumoUsuarios() {
final nomes = repository.listar().map((u) => u.nome).join(', ');
return 'Usuários cadastrados: $nomes';
}
}
void main() {
// Desafio: separar responsabilidades em camadas simples.
final repository = UsuarioRepository();
final service = UsuarioService(repository);
print(service.resumoUsuarios());
}
Saída esperada
Usuários cadastrados: Ana, Bruno, Caio
Como executar
dart run 19-Arquitetura/03-Desafios/codigo_fonte/desafio_arquitetura.dart