Mobile App Development · Dart/Flutter

19 · Arquitetura — Exercícios

Construa, passo a passo, as três camadas — entidade, repositório e serviço — em torno de um pequeno catálogo de livros.

Exercício 1

exercicio_01_entidade.dart

Cria a classe Livro com titulo e autor, sem nenhuma lógica além de guardar os dados — a base da camada de entidade.

// Exercício 1: entidade só com dados, sem lógica de acesso ou regra de negócio.
class Livro {
  final String titulo;
  final String autor;

  Livro(this.titulo, this.autor);
}

void main() {
  final livro = Livro('Dart Essencial', 'Time FIAP');
  print('${livro.titulo} - ${livro.autor}');
}

Saída esperada

Dart Essencial - Time FIAP

Como executar

dart run 19-Arquitetura/02-Exercicios/codigo_fonte/exercicio_01_entidade.dart

Exercício 2

exercicio_02_repositorio.dart

Cria a classe LivroRepository com uma lista fixa de livros em memória e um método listar() — a camada responsável só por fornecer os dados.

// Exercício 2: repositório responsável só por fornecer os dados.
class Livro {
  final String titulo;
  final String autor;

  Livro(this.titulo, this.autor);
}

class LivroRepository {
  // Simula uma fonte de dados em memória.
  final List<Livro> _dados = [
    Livro('Dart Essencial', 'Time FIAP'),
    Livro('Flutter na Prática', 'Time FIAP'),
  ];

  List<Livro> listar() => _dados;
}

void main() {
  final repository = LivroRepository();

  for (final livro in repository.listar()) {
    print('${livro.titulo} - ${livro.autor}');
  }
}

Saída esperada

Dart Essencial - Time FIAP
Flutter na Prática - Time FIAP

Como executar

dart run 19-Arquitetura/02-Exercicios/codigo_fonte/exercicio_02_repositorio.dart

Exercício 3

exercicio_03_servico.dart

Cria a classe LivroService, que recebe um LivroRepository pelo construtor (injeção de dependência) e tem um método que retorna os títulos de todos os livros separados por vírgula.

// Exercício 3: serviço que recebe o repositório pelo construtor (injeção de dependência)
// e aplica uma regra de negócio simples sobre os dados.
class Livro {
  final String titulo;
  final String autor;

  Livro(this.titulo, this.autor);
}

class LivroRepository {
  final List<Livro> _dados = [
    Livro('Dart Essencial', 'Time FIAP'),
    Livro('Flutter na Prática', 'Time FIAP'),
  ];

  List<Livro> listar() => _dados;
}

class LivroService {
  final LivroRepository repository;

  LivroService(this.repository);

  String titulosDisponiveis() {
    final titulos = repository.listar().map((livro) => livro.titulo).join(', ');
    return 'Livros disponíveis: $titulos';
  }
}

void main() {
  final repository = LivroRepository();
  final service = LivroService(repository);

  print(service.titulosDisponiveis());
}

Saída esperada

Livros disponíveis: Dart Essencial, Flutter na Prática

Como executar

dart run 19-Arquitetura/02-Exercicios/codigo_fonte/exercicio_03_servico.dart