Mobile App Development · Dart/Flutter

19 · Arquitetura — Desafios

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

desafio_arquitetura.dart

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