📊 Relatório De-Para: Sistemas Desktop ➔ Web & Backend

Mapeamento Arquitetural, Conceitual e Curricular Completo (Java & Python)

Data: 24/08/2026
Escopo:
Trilha Java: Sistemas com Java (spec_sistemas_com_java) $\longrightarrow$ Backend com Spring Boot (spec_backend_com_java_e_springboot)
Trilha Python: Sistemas com Python (spec_sistemas_com_python) $\longrightarrow$ Backend com FastAPI (spec_backend_com_python_e_fastapi)
Objetivo: Estabelecer o guia canônico de transição da programação local monousuário para sistemas distribuídos em nuvem.


🏛️ 1. Matriz De-Para Conceitual e Arquitetural Geral

Dimensão da Engenharia 🖥️ No Mundo Desktop / Core (Sistemas Locais) 🌐 No Mundo Web / Backend (Sistemas Distribuídos) O Que Muda / Por Que Muda?
Arquitetura Geral Monolito Local Monousuário executado na máquina do cliente. Arquitetura Cliente-Servidor Multi-inquilino (Multi-tenant) hospedada em servidores/nuvem. O processamento e as regras de negócio saem do cliente e passam a rodar centralizados no servidor.
Comunicação / Apresentação Eventos de Interface Gráfica (ActionEvent, cliques em botões, frames). Protocolo HTTP / HTTPS, Verbos (GET, POST, PUT, DELETE) e Payloads JSON. O backend não renderiza telas diretamente; ele expõe endpoints padronizados (APIs RESTful).
Gerenciamento de Estado Stateful: O estado da aplicação e do usuário fica retido na memória RAM local (Heap). Stateless: Cada requisição HTTP deve conter todas as informações necessárias para ser processada. Permite que múltiplos servidores atendam requisições sem depender de sessão em memória local.
Persistência de Dados Drivers Diretos e SQL Manual: JDBC Connection, PreparedStatement ou sqlite3 com queries manuais. ORM (Object-Relational Mapping): JPA/Hibernate, Spring Data, SQLAlchemy ou SQLModel. Abstrai a escrita de SQL repetitivo, gerencia ciclo de vida das entidades, cache e relacionamentos.
Inversão de Controle (IoC/DI) Instanciação Manual (new / Factories): O código cliente cria diretamente as dependências. Injeção Automática de Dependências: O framework gerencia o ciclo de vida (@Autowired, Depends()). Elimina o forte acoplamento entre classes e viabiliza testes unitários e mocks com extrema facilidade.
Contratos de Dados Entidades de Domínio Compartilhadas: As mesmas classes do modelo transitam na interface. DTOs (Data Transfer Objects) e Schemas: Separação estrita entre modelo de banco e dados expostos na rede. Evita vazamento de dados sensíveis (senhas, auditorias) e acoplamento entre o banco e a API pública.
Segurança e Acesso Validação em Tela Local: if (senha.equals(correta)) verificado no próprio cliente. Autenticação Stateless: Tokens criptografados JWT (JSON Web Tokens) e protocolo OAuth2. O servidor não confia no cliente; cada requisição é validada via cabeçalho Authorization: Bearer <token>.
Manipulação de Arquivos Sistema de Arquivos Local: Leitura e escrita direta em pastas do disco rígido (C:\, /tmp). Armazenamento em Nuvem / Object Storage: Uploads em buckets AWS S3 ou MinIO via streams. Servidores web são efêmeros e descartáveis; arquivos estáticos devem residir em storage persistente.
Documentação Técnica Javadoc / Docstrings Locais: Arquivos HTML estáticos consultados em tempo de desenvolvimento. Documentação Interativa Viva: Swagger UI / OpenAPI / ReDoc geradas dinamicamente. Permite que times de frontend e terceiros testem e consumam a API diretamente pelo navegador.
Escala e Concorrência Threads Locais / UI Thread: Evitar travamento da tela gráfica local. Servidores de Aplicação e Concorrência Web: Tomcat, Uvicorn, Workers, Pools de Conexões. O backend deve atender dezenas de milhares de usuários simultâneos com alto throughput.
Testes de Software Testes de Unidade de Classes: Validar métodos de classes individuais (assertEquals, assert). Testes de Integração de Endpoints HTTP: MockMvc, WebTestClient, httpx.AsyncClient. Valida o ciclo completo da requisição HTTP: serialização JSON, filtros de segurança, banco e status code.
Empacotamento e Deploy Executável Local: Arquivo .jar, .exe ou script .py instalado na máquina do usuário. Imagens de Contêineres: Docker, Docker Compose, Kubernetes e Deploy em Nuvem. Garante portabilidade idêntica entre ambientes de desenvolvimento, homologação e produção.

☕ 2. Matriz De-Para Java: spec_sistemas_com_java $\longrightarrow$ spec_backend_com_java_e_springboot

flowchart LR
    subgraph JAVA_DESK["☕ Sistemas com Java (Desktop/Core)"]
        J1["DAO Manual (PreparedStatement & ResultSet)"]
        J2["Instanciação Direta ('new VendedorDaoJdbc()')"]
        J3["Interface JavaFX (Stage, Scene, FXML, Controller)"]
        J4["Login Simples em Janela Local"]
        J5["FileOutputStream no Disco Rígido"]
        J6["Banco Relacional Local (H2 / MySQL)"]
    end

    subgraph JAVA_WEB["🍃 Backend com Java & Spring Boot"]
        S1["Spring Data JPA (@Entity, JpaRepository)"]
        S2["Injeção de Dependências (@Service, @Repository, @Autowired)"]
        S3["APIs RESTful (@RestController, @GetMapping, DTOs)"]
        S4["Spring Security + Filtros + Tokens JWT Stateless"]
        S5["AWS S3 SDK (AmazonS3 / S3Client)"]
        S6["NoSQL MongoDB (MongoRepository)"]
    end

    J1 -->|Evolui para| S1
    J2 -->|Evolui para| S2
    J3 -->|Evolui para| S3
    J4 -->|Evolui para| S4
    J5 -->|Evolui para| S5
    J6 -->|Evolui para| S6

📋 Mapeamento Detalhado por Conceito em Java:

Conceito / Componente No Curso de Sistemas com Java (Desktop) No Curso de Backend com Spring Boot (Web)
Persistência de Dados java.sql.Connection, PreparedStatement ps = conn.prepareStatement("SELECT * ..."), iteração manual com rs.next(). (Capítulo 21) Anotações JPA @Entity, @Id, @GeneratedValue, @ManyToOne e interfaces public interface ProdutoRepository extends JpaRepository<Produto, Long>. (Tópico 24)
Inversão de Controle & DI Fábricas manuais (DaoFactory.createSellerDao()) e passagem explícita de referências por construtor. (Capítulo 15) Gerenciamento pelo ApplicationContext do Spring com anotações @Component, @Service, @Repository e injeção automática no construtor. (Tópico 20)
Camada de Apresentação Interface gráfica rica local com JavaFX, arquivos de layout .fxml e Initializable Controller. (Capítulo 22) Controladores REST com @RestController, @RequestMapping("/api/v1/produtos"), retornando ResponseEntity<T> com serialização JSON automática. (Tópico 25a)
Contrato e Validação Validação imperativa em métodos setters (if (preco <= 0) throw new IllegalArgumentException()). (Capítulo 07) DTOs imutáveis com Jakarta Bean Validation (@NotBlank, @NotNull, @Positive, @Email) e captura global de erros via @ControllerAdvice / @ExceptionHandler. (Tópico 25c)
Autenticação e Permissões Verificação de usuário e senha consultando tabela local e guardando objeto UsuarioLogado em memória estática. Filtro OncePerRequestFilter, cadeia de segurança SecurityFilterChain, criptografia de senhas com BCryptPasswordEncoder e geração/validação de tokens JWT. (Tópico 25b)
Documentação de Sistema Geração de documentação estática Javadoc a partir de comentários /** ... */. (Capítulo 01) Springdoc OpenAPI / Swagger 3, expondo interface web interativa em /swagger-ui.html com decorators @Operation e @ApiResponse. (Tópico 25e)
Arquitetura de Dados Modelo estritamente Relacional (Tabelas, Chaves Primárias, Chaves Estrangeiras e JOINs em SQL). (Capítulo 21) Modelo Documental NoSQL com MongoDB (@Document, @Field, coleções não-estruturadas e queries com @Query). (Tópico 26)

🐍 3. Matriz De-Para Python: spec_sistemas_com_python $\longrightarrow$ spec_backend_com_python_e_fastapi

flowchart LR
    subgraph PY_DESK["🐍 Sistemas com Python (Desktop/Core)"]
        P1["sqlite3 Direto (Cursor, execute, commit)"]
        P2["Instanciação Direta de Classes e DAOs"]
        P3["CustomTkinter (CTk, CTkFrame, CTkButton)"]
        P4["Dataclasses Locais (@dataclass)"]
        P5["with open(...) Local"]
        P6["Loops e Funções Síncronas"]
    end

    subgraph PY_WEB["⚡ Backend com Python & FastAPI"]
        F1["SQLAlchemy 2.0 / SQLModel (AsyncSession, select)"]
        F2["Injeção de Dependências com 'Depends()'"]
        F3["APIs ASGI Assíncronas (FastAPI, APIRouter)"]
        F4["Schemas Pydantic v2 (BaseModel, Field)"]
        F5["UploadFile + Integração AWS S3 / Boto3"]
        F6["Rotas Assíncronas 'async def' & Uvicorn"]
    end

    P1 -->|Evolui para| F1
    P2 -->|Evolui para| F2
    P3 -->|Evolui para| F3
    P4 -->|Evolui para| F4
    P5 -->|Evolui para| F5
    P6 -->|Evolui para| F6

📋 Mapeamento Detalhado por Conceito em Python:

Conceito / Componente No Curso de Sistemas com Python (Desktop) No Curso de Backend com FastAPI (Web)
Persistência de Dados import sqlite3, conn.cursor(), cursor.execute("SELECT ... WHERE id = ?", (id,)), cursor.fetchone(). (Capítulo 21) SQLAlchemy 2.0 / SQLModel: Classes herdando de SQLModel, table=True, sessões assíncronas com AsyncSession, queries declarativas select(Produto).where(...). (Capítulo 05)
Inversão de Controle & DI Instanciação de serviços passando instâncias concretas no __init__ ou via Protocols. (Capítulo 15) Sistema de Injeção de Dependências Depends() do FastAPI para gerenciar conexões de banco (get_db), autenticação (get_current_user) e serviços. (Capítulo 04)
Camada de Apresentação Interface gráfica moderna com customtkinter.CTk(), CTkButton, variáveis observáveis e binds de clique. (Capítulo 22) Roteadores FastAPI (APIRouter), decoradores @router.get(), @router.post(), parsing de cabeçalhos, query strings e corpo JSON. (Capítulo 03)
Modelagem e DTOs @dataclass(frozen=True, slots=True) para entidades de dados imutáveis em memória. (Capítulo 19) Pydantic v2 BaseModel: Schemas tipados de Request e Response (ProdutoCreate, ProdutoResponse), validações com Field(gt=0, max_length=100). (Capítulo 02)
Autenticação e Permissões Validação imperativa de login contra tabela local de usuários. (Capítulo 07) OAuth2PasswordBearer, hashing de senhas com passlib (bcrypt), geração e decodificação de tokens JWT com python-jose ou PyJWT. (Capítulo 06)
Documentação Técnica Docstrings padronizadas conforme PEP 257 \"\"\"...\"\"\" em módulos e funções. (Capítulo 01) Geração OpenAPI Automática via Swagger UI em /docs e ReDoc em /redoc, documentando tipos, códigos de erro e schemas. (Capítulo 07)
Armazenamento de Arquivos Leitura e escrita em disco local usando with open("arquivo.csv", "r") as f:. (Capítulo 14) Recepção de arquivos via UploadFile, leitura em stream assíncrono e upload para AWS S3 utilizando aioboto3 ou boto3. (Capítulo 09)
Concorrência e Assincronia Concorrência básica com threading e corrotinas simples asyncio.run(). (Capítulo 20) Rotas declaradas com async def, servidor ASGI de alta performance Uvicorn, e BackgroundTasks para tarefas não-bloqueantes. (Capítulos 01 e 08)

⚖️ 4. Matriz Cruzada de Equivalência: Spring Boot (Java) $\longleftrightarrow$ FastAPI (Python)

Recurso Web / Backend 🍃 No Ecossistema Java (Spring Boot) ⚡ No Ecossistema Python (FastAPI)
Servidor / Runtime HTTP Apache Tomcat Embutido (Servlet / Thread Pool) Uvicorn / Gunicorn (Servidor ASGI Assíncrono com Event Loop)
Controlador de Rotas @RestController + @GetMapping("/itens") app = FastAPI() + @app.get("/itens")
Contratos e DTOs Java Records + Jakarta Validation (@NotNull, @Size) Classes Pydantic v2 BaseModel + Field(...)
Injeção de Dependência @Autowired / Injeção via Construtor (@Service) Depends(get_db) / Annotated[Session, Depends(get_db)]
ORM / Banco de Dados Hibernate + Spring Data JPA (JpaRepository<T, ID>) SQLAlchemy 2.0 / SQLModel (AsyncSession, select(T))
Segurança & JWT Spring Security + SecurityFilterChain + JJWT FastAPI Security (OAuth2PasswordBearer) + python-jose / PyJWT
Documentação Viva Springdoc OpenAPI / Swagger UI (/swagger-ui.html) Swagger UI NATIVO (/docs) e ReDoc (/redoc)
Tratamento de Exceções @ControllerAdvice + @ExceptionHandler(RecursoNotFound.class) @app.exception_handler(RecursoNotFoundException)
Upload de Mídia MultipartFile + AmazonS3 Client UploadFile + Boto3 / Aioboto3
Tarefas em Segundo Plano @Async + ThreadPoolTaskExecutor BackgroundTasks.add_task(funcao, params)
Testes de Integração @SpringBootTest + MockMvc pytest + TestClient(app) / httpx.AsyncClient
Containerização Spring Boot Dockerfile multi-stage com Eclipse Temurin JRE Dockerfile multi-stage com Python Slim / UV

⬅️ Voltar ao Índice Geral