# 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.