Article image
Matheus Deus
Matheus Deus29/06/2026 16:50
Compartilhe

DIO Bank Pro: evoluindo um desafio de banco com TypeScript, POO e arquitetura em camadas

  • #GitHub
  • #HTML
  • #Node.js
  • #TypeScript
  • #CSS

Resumo

Este artigo apresenta o desenvolvimento do DIO Bank Pro, uma evolução do desafio “Construindo uma App Simples de Banco com TypeScript”, proposto pela DIO. O projeto foi estruturado com foco em Programação Orientada a Objetos, separação de responsabilidades, regras de domínio, arquitetura em camadas, testes automatizados e documentação técnica. A proposta não foi apenas entregar uma solução funcional, mas transformar um exercício introdutório em uma base de estudo mais organizada, didática e alinhada a boas práticas de desenvolvimento de software.

Palavras-chave: TypeScript. Programação Orientada a Objetos. Arquitetura em camadas. SOLID. Testes automatizados. DIO.

1. Introdução

O desenvolvimento de software profissional exige mais do que a simples implementação de funcionalidades. À medida que uma aplicação cresce, torna-se necessário organizar responsabilidades, reduzir acoplamentos, proteger regras de negócio e criar mecanismos que facilitem manutenção, testes e evolução do código.

No contexto do desafio da DIO, a proposta inicial consistia na construção de uma aplicação bancária simples utilizando TypeScript. A partir dessa base, o projeto foi expandido para uma versão denominada DIO Bank Pro, com o objetivo de aplicar conceitos de Programação Orientada a Objetos, arquitetura em camadas, validações de domínio e documentação técnica.

A escolha do TypeScript se justifica por sua capacidade de adicionar tipagem estática ao ecossistema JavaScript, permitindo maior previsibilidade na modelagem de classes, interfaces, serviços e contratos internos da aplicação (MICROSOFT, [s.d.]a). Além disso, configurações rigorosas do compilador, como strict, noImplicitAny e strictNullChecks, contribuem para identificar problemas durante o desenvolvimento e reduzir erros silenciosos no código (MICROSOFT, [s.d.]b).

2. Objetivo do projeto

O objetivo principal do DIO Bank Pro foi evoluir uma aplicação bancária simples para uma solução mais organizada, didática e tecnicamente defensável em contexto de portfólio.

De forma específica, o projeto buscou:

  • aplicar conceitos de Programação Orientada a Objetos;
  • organizar o código em camadas com responsabilidades distintas;
  • implementar regras de domínio para operações bancárias;
  • criar diferentes tipos de conta com comportamentos específicos;
  • utilizar TypeScript em modo estrito;
  • adicionar testes automatizados;
  • melhorar a documentação técnica do repositório;
  • criar uma página estática de apresentação para valorização do portfólio.

Essa abordagem reforça a ideia de que projetos de bootcamp podem ser utilizados como laboratório para aplicação de boas práticas de engenharia de software, desde que as decisões técnicas sejam coerentes com o escopo real da solução.

3. Fundamentação técnica

A Programação Orientada a Objetos permite estruturar sistemas a partir de classes, objetos, herança, encapsulamento e polimorfismo. No TypeScript, o suporte a classes possibilita representar entidades de domínio com propriedades, métodos, modificadores de acesso, construtores e herança entre classes (MICROSOFT, [s.d.]a).

No DIO Bank Pro, esse conceito foi aplicado por meio de uma classe base para contas bancárias, da qual derivam tipos específicos de conta, como conta pessoal, conta empresarial e conta bônus. Essa modelagem permite reaproveitar comportamentos comuns, como depósito, saque e validação de operação, ao mesmo tempo em que possibilita especializar regras de negócio em subclasses.

A arquitetura em camadas foi utilizada como estratégia de separação de responsabilidades. Fowler (2002) descreve padrões arquiteturais voltados à organização de aplicações corporativas, destacando a importância de estruturar responsabilidades para facilitar manutenção e evolução. De forma complementar, Martin (2017) defende que uma boa arquitetura deve proteger as regras de negócio contra dependências excessivas de detalhes externos, como interface, banco de dados ou frameworks.

Os princípios SOLID também serviram como referência conceitual. Embora o projeto não tenha como objetivo implementar todos os princípios de maneira exaustiva, ele se inspira especialmente na separação de responsabilidades e na inversão de dependência, conceitos associados à criação de sistemas mais compreensíveis, testáveis e extensíveis (MARTIN, 2002).

4. Tecnologias utilizadas

O projeto foi desenvolvido com as seguintes tecnologias e ferramentas:

  • TypeScript, para modelagem tipada da aplicação;
  • Node.js, como ambiente de execução JavaScript fora do navegador;
  • Vitest, para testes automatizados;
  • ESLint, para análise estática de código;
  • Prettier, para padronização de formatação;
  • GitHub, para versionamento e publicação do repositório;
  • GitHub Actions, como base para automação de verificações;
  • HTML e CSS, para construção de uma página estática de apresentação.

O Node.js foi utilizado por permitir a execução de código JavaScript fora do navegador, sendo adequado para aplicações executadas em terminal, scripts e serviços back-end (OPENJS FOUNDATION, [s.d.]). O Vitest foi adotado por ser uma ferramenta moderna de testes no ecossistema JavaScript e TypeScript, oferecendo recursos voltados à execução, organização e automação de testes (VITEST, [s.d.]).

5. Modelagem do domínio bancário

A camada de domínio concentra as principais regras de negócio da aplicação. No DIO Bank Pro, o domínio foi estruturado em torno de entidades bancárias, transações e erros específicos.

A entidade base de conta concentra comportamentos comuns, como:

  • ativação de conta;
  • desativação de conta;
  • depósito;
  • saque;
  • consulta de saldo;
  • histórico de transações;
  • validação de valor;
  • validação de conta ativa;
  • validação de saldo suficiente.

A partir dessa base, foram definidos três tipos principais de conta.

A conta pessoal representa uma conta bancária padrão, com operações de depósito, saque e consulta de histórico.

A conta empresarial adiciona a possibilidade de empréstimo, respeitando um limite definido pela regra de negócio. Essa especialização demonstra o uso de herança e extensão de comportamento.

A conta bônus implementa uma regra adicional: a cada depósito realizado, é aplicado um bônus de 10% sobre o valor depositado. Essa regra evidencia o uso de polimorfismo, pois o método de depósito assume comportamento específico nesse tipo de conta.

Essa estrutura permite demonstrar, de forma prática, como a Programação Orientada a Objetos pode ser aplicada para representar comportamentos de um domínio, evitando que toda a lógica fique concentrada em funções isoladas ou arquivos genéricos.

6. Arquitetura em camadas

O projeto foi organizado em quatro camadas principais: Domain, Application, Infrastructure e Presentation.

6.1 Domain

A camada de domínio contém as entidades, contratos e erros relacionados às regras de negócio. Essa camada representa o núcleo conceitual da aplicação.

Nela estão as contas, transações, enums de status, tipos de transação e erros de domínio. Essa separação ajuda a manter as regras bancárias independentes da forma como a aplicação é executada ou apresentada.

6.2 Application

A camada de aplicação contém os serviços responsáveis por orquestrar casos de uso. No projeto, essa camada inclui serviços como criação de contas, depósitos, saques, empréstimos e consulta de histórico.

Essa separação evita que a apresentação acesse diretamente detalhes do domínio sem passar por uma coordenação adequada. Também facilita a leitura do fluxo de execução e a criação de testes.

6.3 Infrastructure

A camada de infraestrutura contém implementações técnicas, como repositório em memória e logger. Essa camada representa detalhes externos ao domínio.

Mesmo em um projeto educacional, separar infraestrutura ajuda a demonstrar uma preocupação arquitetural relevante: regras de negócio não devem depender diretamente de detalhes técnicos que podem mudar no futuro.

6.4 Presentation

A camada de apresentação é responsável pela execução do sistema no terminal e pela demonstração das operações bancárias.

No caso deste projeto, a aplicação principal é executada via terminal, enquanto a página estática serve como vitrine visual do repositório. Portanto, o projeto não deve ser interpretado como uma aplicação bancária web completa, mas como um sistema em TypeScript com apresentação em terminal e material visual de portfólio.

7. Validações de domínio e tratamento de erros

Um dos pontos mais importantes do projeto foi a implementação de validações de domínio. Em aplicações financeiras, ainda que simuladas, não basta permitir operações: é necessário controlar quando uma operação é válida.

O DIO Bank Pro implementa validações como:

  • impedir depósito com valor negativo ou igual a zero;
  • impedir saque com saldo insuficiente;
  • impedir operação em conta inativa;
  • impedir operação em conta encerrada;
  • impedir empréstimo para conta não empresarial;
  • controlar limite de empréstimo empresarial.

Essas validações tornam o sistema mais consistente e reforçam a importância de proteger as regras de negócio no domínio, em vez de espalhá-las pela interface ou por scripts de execução.

8. Testes automatizados

A presença de testes automatizados aumenta a confiabilidade do projeto. No DIO Bank Pro, os testes foram utilizados para validar comportamentos essenciais, como criação de contas, depósitos, saques, bônus, empréstimos e exceções de domínio.

Testes automatizados são especialmente importantes em projetos com regras de negócio, pois ajudam a verificar se alterações futuras não quebram comportamentos esperados. O uso do Vitest contribuiu para estruturar esses testes dentro do ecossistema TypeScript de forma simples e objetiva (VITEST, [s.d.]).

9. TypeScript em modo estrito

O projeto utiliza configurações rígidas do TypeScript, incluindo strict, noImplicitAny, strictNullChecks, strictFunctionTypes, strictPropertyInitialization, noImplicitReturns e outras opções de verificação.

Essas configurações são relevantes porque aumentam o nível de exigência do compilador e reduzem a probabilidade de erros silenciosos. Em projetos profissionais, esse tipo de configuração contribui para maior segurança durante refatorações e evolução do código (MICROSOFT, [s.d.]b).

Além disso, o uso de modificadores como private e readonly reforça o encapsulamento e protege atributos importantes contra alterações indevidas, alinhando-se aos fundamentos da Programação Orientada a Objetos (MICROSOFT, [s.d.]a).

10. Automação e integração contínua

O projeto também possui uma estrutura de workflow com GitHub Actions, ferramenta utilizada para automatizar etapas como instalação de dependências, verificação de tipos, análise estática, checagem de formatação e execução de testes.

O GitHub Actions permite automatizar fluxos de trabalho de desenvolvimento, incluindo tarefas de integração contínua e entrega contínua, como build, testes e deploy (GITHUB, [s.d.]). No contexto do DIO Bank Pro, essa configuração funciona como base de automação para qualidade de código.

É importante destacar que, para o workflow ser executado corretamente em todos os cenários, os nomes das branches configuradas no arquivo de automação devem estar alinhados com a branch principal utilizada no repositório. Esse cuidado evita que a automação fique restrita a branches que não representam o fluxo real de desenvolvimento.

11. Documentação e apresentação do projeto

Além do código, o projeto recebeu uma documentação mais elaborada no README, com descrição da proposta, tecnologias utilizadas, estrutura de pastas, funcionalidades, scripts de execução e diferenciais em relação ao desafio original.

Também foi criada uma página estática de apresentação, com objetivo de valorizar o repositório como peça de portfólio. Essa página não substitui o sistema principal, mas funciona como uma vitrine visual para recrutadores, avaliadores e outros desenvolvedores.

Essa decisão é importante porque um projeto técnico bem apresentado tende a comunicar melhor suas decisões de arquitetura, seu escopo e seu valor educacional.

12. Discussão

O DIO Bank Pro não deve ser entendido como um sistema bancário real pronto para produção. Ele não possui autenticação real, persistência em banco de dados, criptografia, auditoria, observabilidade, controle transacional, integração com APIs financeiras ou requisitos regulatórios.

No entanto, dentro do escopo de um desafio educacional, o projeto demonstra evolução relevante. A estrutura em camadas, as entidades de domínio, os serviços de aplicação, os testes e a documentação indicam uma preocupação com qualidade, organização e clareza técnica.

Esse tipo de evolução é importante para quem está construindo portfólio, pois mostra a capacidade de ir além da reprodução do conteúdo e aplicar conceitos de engenharia de software em uma solução própria.

13. Conclusão

O desenvolvimento do DIO Bank Pro permitiu transformar um desafio simples em um projeto mais completo, organizado e tecnicamente defensável.

A principal contribuição do projeto foi aplicar, em um contexto prático, conceitos como Programação Orientada a Objetos, separação de responsabilidades, arquitetura em camadas, regras de domínio, testes automatizados e documentação técnica.

Mais do que entregar uma aplicação funcional, o projeto demonstra uma evolução na forma de pensar software: não apenas “fazer funcionar”, mas estruturar, validar, documentar e apresentar uma solução de forma profissional.

Repositório do projeto:

https://github.com/matheusflorindo32/dio-bank-pro

Referências

FOWLER, Martin. Patterns of Enterprise Application Architecture. Boston: Addison-Wesley, 2002.

GITHUB. Understanding GitHub Actions. GitHub Docs, [s.d.]. Disponível em: https://docs.github.com/en/actions/get-started/understand-github-actions. Acesso em: 29 jun. 2026.

MARTIN, Robert C. Agile Software Development: Principles, Patterns, and Practices. Upper Saddle River: Prentice Hall, 2002.

MARTIN, Robert C. Clean Architecture: A Craftsman’s Guide to Software Structure and Design. Boston: Pearson, 2017.

MICROSOFT. TypeScript Documentation: Classes. TypeScript Handbook, [s.d.]a. Disponível em: https://www.typescriptlang.org/docs/handbook/2/classes.html. Acesso em: 29 jun. 2026.

MICROSOFT. TSConfig Reference. TypeScript Documentation, [s.d.]b. Disponível em: https://www.typescriptlang.org/tsconfig/. Acesso em: 29 jun. 2026.

OPENJS FOUNDATION. Introduction to Node.js. Node.js Learn, [s.d.]. Disponível em: https://nodejs.org/learn/getting-started/introduction-to-nodejs. Acesso em: 29 jun. 2026.

VITEST. Getting Started. Vitest Guide, [s.d.]. Disponível em: https://vitest.dev/guide/. Acesso em: 29 jun. 2026.

Compartilhe
Comentários (0)