Mobile App Development · Dart/Flutter
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
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
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
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