Skip to content

Instantly share code, notes, and snippets.

@italopessoa
Last active June 8, 2024 00:01
Show Gist options
  • Save italopessoa/fc166be0653db924f9876ea77cb0937d to your computer and use it in GitHub Desktop.
Save italopessoa/fc166be0653db924f9876ea77cb0937d to your computer and use it in GitHub Desktop.
Desafio: Arquitetura Limpa para uma ONG

Desafio: Arquitetura Limpa para uma ONG

Não vale nota.* Esta é uma atividade individual que tem como objetivo fixar os conteúdos desenvolvidos durante a disciplina.

O Desafio

Para entender melhor como a Arquitetura Limpa funciona, desafiamos você a construir uma solução para o seguinte problema:

Uma ONG recebe doações de alimentos em pacotes, armazena-os e depois entrega esses pacotes para outras ONGs, de acordo com suas necessidades.

Exemplo:

A ONG recebe um pacote com 200 kg de arroz, 100kg de feijão e 300 latas de óleo. Uma outra ONG solicita a doação de 30kg de arroz, 10kg de feijão e 15 latas de óleo. Para atender a solicitação, a entrega deve ser feita com outros pacotes, pois é necessária uma separação diferente.

A Proposta

O objetivo é criar uma arquitetura e uma aplicação que:

  1. Registre o recebimento dos pacotes, incluindo o cadastro dos produtos recebidos (peso ou unidades).
  2. Registre os pedidos de doação, com as quantidades de produtos solicitadas.
  3. Valide se é possível atender aos pedidos, considerando o estoque disponível.
  4. Emita uma listagem completa dos pedidos efetuados.
  5. Emita uma listagem do estado atual do estoque de alimentos.
  6. Efetue a entrega de um pedido, realizando a baixa das quantidades no estoque e registrando a entrega.

Orientações

  • Comece resolvendo apenas uma das regras de negócio (caso de uso) e vá melhorando o desenho da arquitetura de acordo com os outros casos de uso. Não resolva tudo de uma vez.
  • Priorize a simplicidade e o atendimento ao caso de uso. Não defina mais do que o necessário.
  • Pense na solução antes de implementá-la. Use a arquitetura para guiar a implementação do código.

Entregáveis

Você deve entregar:

  • O desenho da arquitetura, com as classes e em qual camada/tipo ela se enquadra.
  • O repositório Git com os códigos desenvolvidos para a tarefa.

Dúvidas e Compartilhamento

Se precisar de ajuda, procure-nos no Discord. Se quiser, publique o link do seu repositório Github no Discord para discutir a solução com seus colegas.

Referências

  • EVANS, Eric. Domain-Driven Design: Tackling Complexity in the Heart of Software. [s.l.]: Addison-Wesley Professional, 2003.
  • FOWLER, Martin. Disponível em: https://martinfowler.com/bliki/UseCase.html
  • MARTIN, Robert. Arquitetura Limpa. Rio de Janeiro: Alta Books Editora, 2019.
  • MARTIN, Robert. Clean Code: A Handbook of Agile Software Craftsmanship. [s.l.]: Pearson, 2008.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment