# Plano de Modularização para o Sistema Flash Card Navegador ## Objetivo Aumentar a separação de responsabilidades, facilitar manutenção, testes e evolução do sistema, tornando-o mais robusto e escalável. ## 1. Separação de Camadas - **UI (Interface):** - Responsável apenas por renderizar elementos e capturar eventos do usuário. - Exemplo: ui/ui.js, ui/cardsLoader.js - **Lógica de Negócio (Controller):** - Processa regras, validações, comandos e intermedia entre UI e dados. - Exemplo: ui/controller.events.js, ui/controller.fuzzy.js - **Dados:** - Gerencia leitura, escrita e atualização dos dados dos cartões. - Exemplo: data/*.js - **Serviços Externos:** - STT, TTS, workers, etc. (assets/whisper/) ## 2. Uso de Módulos ES6 - Refatorar arquivos JS para usar `export` e `import`. - Exemplo: ```js // Em controller.fuzzy.js export function fuzzyMatch(a, b) { ... } // Em outro arquivo import { fuzzyMatch } from './controller.fuzzy.js'; ``` ## 3. Redução de Acoplamento - Evitar que funções de UI manipulem diretamente dados ou lógica de negócio. - Criar interfaces claras entre camadas (ex: UI chama controller, controller chama data/service). ## 4. Carregamento Sob Demanda - Usar importação dinâmica para módulos pesados ou raramente usados. - Exemplo: ```js if (precisaSTT) { import('./controller.stt.js').then(mod => mod.iniciarSTT()); } ``` ## 5. Documentação e Convenções - Documentar cada função e módulo (usar modelo sugerido). - Definir convenções de nomes e estrutura de pastas. ## 6. Testes e Versionamento - Adotar testes unitários para funções críticas. - Usar Git para versionamento e controle de mudanças. ## 7. Exemplo de Estrutura Modular ``` /Documentacao /ui - ui.js - cardsLoader.js - controller.events.js - controller.fuzzy.js - ... /assets/whisper /data /css /views ``` ## 8. Próximos Passos 1. Escolher um módulo para refatorar como exemplo. 2. Aplicar import/export e separar responsabilidades. 3. Testar e documentar. 4. Repetir para os demais módulos. --- Este plano pode ser ajustado conforme necessidades do projeto e equipe.