Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works
Anything · Lazarus or Delphi
Random projectRandom project

AppPedidos

View on GitHub

Member rating

No ratings yet.

Sign in to rate this project.

README

# 🧾 Projeto PedidosApp

O **PedidosApp** é um sistema de gestão simples desenvolvido em **Delphi**, com foco em **organização de código, separação de camadas e clareza na lógica de negócios**.

Ele simula o fluxo completo de cadastro de **Clientes, Produtos e Pedidos**, permitindo adicionar, editar e visualizar dados de forma estruturada.


## ⚙️ Estrutura e Decisões de Arquitetura

### 🔹 1. Separação em camadas

O projeto foi dividido em três pastas principais:

- **domain** → contém as classes de negócio (nCliente, nProduto, nPedido, nPedidoItem), responsáveis pela lógica e regras.

- **infrastructure** → contém repositórios e utilitários genéricos (nRepositorioMem\_U, nSqlBuilder\_U, nRepositorioGlobal\_U).

- **presentation** → contém todas as telas (nFrmMain\_U, nFrmClientes\_U, nFrmProdutos\_U, nFrmPedidos\_U, nFrmPedidoCadastro\_U, nFrmSqlPreview\_U).

➡️ Essa divisão garante **baixo acoplamento**, facilitando futuras migrações para banco de dados real ou APIs.


### 🔹 2. Repositório Genérico em Memória

O TnRepositorioMem<T> foi criado para armazenar objetos de qualquer tipo (Clientes, Produtos, Pedidos) em **listas genéricas**.

- Facilita testes sem banco de dados.

- Suporta operações CRUD básicas (Adicionar, Remover, Listar, etc.).

- Centraliza a manipulação dos dados, evitando duplicação de lógica.


### 🔹 3. Interface e UX das Telas

Cada tela segue um **padrão visual uniforme**, com painéis de cabeçalho e grids centralizados.

Foram criadas telas modulares e reaproveitáveis:

- nFrmClientes\_U → Cadastro e listagem de clientes.

- nFrmProdutos\_U → Cadastro e listagem de produtos.

- nFrmPedidos\_U → Gerenciamento de pedidos.

- nFrmPedidoCadastro\_U → Edição detalhada de um pedido.

Todos os formulários seguem a filosofia: **campos obrigatórios, validações claras e feedback ao usuário.**


### 🔹 4. Lógica dos Pedidos

- Cada pedido possui uma lista de itens (TnPedidoItem).

- O cálculo do total é automático via método CalcularTotal.

- O número do pedido (PED-0001, PED-0002, ...) é gerado dinamicamente.

- Alterações respeitam o status do pedido:

  - **Aberto:** pode ser editado.

  - **Faturado:** bloqueado para edição (campos e botões desabilitados).


### 🔹 5. Segurança e Integridade

- Antes de salvar, o sistema valida se há **cliente e itens válidos**.

- Evita **duplicação de pedidos**.

- Evita **Access Violations** com verificações de objetos e listas.

- Implementa bloqueios visuais e lógicos para pedidos faturados.


### 🔹 6. Utilitários e SQL Preview

- O nSqlBuilder\_U foi criado para montar consultas SQL dinamicamente.

- A tela nFrmSqlPreview\_U exibe o SQL gerado de forma amigável.

- Essas ferramentas auxiliam em depuração e aprendizado de boas práticas de geração de comandos.


## 🧩 Tecnologias Utilizadas

- **Delphi VCL**

- **Generics.Collections**

- **ClientDataSet** (para exibir dados temporários)

- **Arquitetura limpa e extensível**

- **Padrões inspirados em DDD (Domain Driven Design)**


## 🚀 Decisões-Chave Resumidas

Área Decisão

| Estrutura | Separação em camadas | Organização e escalabilidade |

| Dados | Repositório em memória | Simular persistência e facilitar testes |

| Interface | Padrão visual único | Coerência e reuso de componentes |

| Pedidos | Bloqueio de pedidos faturados | Evitar inconsistências |

| Código | Uso de generics e listas | Reduzir redundância |

| SQL | Builder visual (nSqlBuilder\_U) | Aprendizado e transparência da lógica |


## 👤 Autor

**Gabriel Milani**

Desenvolvido como estudo de boas práticas e arquitetura limpa em **Delphi**.