Padrão Geral do Código Fonte: mudanças entre as edições
Ir para navegação
Ir para pesquisar
| (3 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
| Linha 1: | Linha 1: | ||
= Organização do Projeto = | = Organização do Projeto = | ||
Essa sessão define os conceitos e organização da implementação do código, tanto da engine PlayTale, | Essa sessão define os conceitos e organização da implementação do código, tanto da engine PlayTale, quanto do primeiro jogo sendo desenvolvido para ela, o Mystery Realms. | ||
== Estrutura de Projeto == | == Estrutura de Projeto == | ||
| Linha 14: | Linha 14: | ||
:* '''.vos''' - Pacote base para alocação dos VOs do jogo. | :* '''.vos''' - Pacote base para alocação dos VOs do jogo. | ||
== | == Estrutura Maven == | ||
* | * Diretórios: | ||
:* '''src''' - arquivos fonte do jogo e da engine. | |||
:* '''srcTest''' - arquivos fonte de testes unitários. | |||
:* '''etc''' - estrutura para documentos, scripts e outros materiais do projeto. | |||
== Codificação UTF-8 | == Configurações de Build == | ||
* | * Codificação de arquivos: '''UTF-8''' | ||
* Versão Java: '''Java 1.8''' | |||
* Gerenciador de build: '''Maven''' | |||
* Geração de pacotes JAR com estrutura modular por projetos. | |||
== | = Tecnologias Utilizadas = | ||
* | |||
== Engine (Back-end) == | |||
* '''Java 8+''' – linguagem principal da engine PlayTale | |||
:* ''' | * '''GSON''' – manipulação de JSON | ||
* '''Servidor HTTP Java (com.sun.net.httpserver)''' – servidor leve embutido para API | |||
* '''RFW Framework''' – framework proprietário com: | |||
:* Estrutura de VOs | |||
:* Validações e Exceptions | |||
:* Serialização e Persistência | |||
:* Logger e Pré-processamento | |||
* '''Serialização por arquivos locais''' – persistência dos objetos do jogo em disco, usando estrutura organizada por diretórios. | |||
== Interface (Front-end) == | |||
* '''Vue.js 3''' – framework reativo para criação da interface | |||
* '''Quasar Framework''' – framework baseado em Vue que permite: | |||
:* Criação de UI Web responsiva | |||
:* Exportação para Android/iOS (via Cordova ou Capacitor) | |||
:* Componentes customizáveis para visual de jogo (barras de vida, botões personalizados etc.) | |||
* '''JavaScript ES6+''' – lógica de chamada de APIs | |||
* '''Fetch API''' – comunicação com servidor via JSON | |||
== Ferramentas de Desenvolvimento == | |||
* '''Visual Studio Code (VS Code)''' – IDE principal de desenvolvimento | |||
:* Plugins: Volar (Vue 3), Debugger for Chrome, Quasar Extension Pack | |||
* '''Vue Devtools''' – extensão de navegador para debug em tempo real | |||
* '''Quasar CLI''' – ferramenta para desenvolvimento, empacotamento e publicação da interface | |||
= Padrões de Código Desenvolvimento = | = Padrões de Código Desenvolvimento = | ||
== JavaDoc == | == JavaDoc == | ||
* Sempre gere javadoc em português nos atributos, classes e métodos utilizando as informações presentes na documentação wiki com explicação mais detalhada possível sobre sua finalidade, funcionamento e limitações. Pode inclusive colocar referências para as páginas wiki com mais informações. | |||
:* No javadoc a referência para os links deve ser a url completa e não o modelo de link wiki. Exemplo: no wiki a página [[Ficha_do_Jogador]] deve ser escrita com a tag <a href> com o link 'https://mysteryrealms.rodrigogml.eng.br/index.php?title=Ficha_do_Jogador', e target para abertura em nova janela. | |||
* '''JavaDoc de Classe''' | * '''JavaDoc de Classe''' | ||
| Linha 42: | Linha 66: | ||
== Regras de Escrita de Código == | == Regras de Escrita de Código == | ||
* Sempre escrever código em inglês. | * Sempre escrever código em inglês. | ||
* Não gere os métodos getter e setter nos Beans/VOs. | * Não gere os métodos getter e setter nos Beans/VOs. | ||
* Utilizar sempre BigDecimal para números decimais, nunca utilizar float. | * Utilizar sempre BigDecimal para números decimais, nunca utilizar float. | ||
Edição atual tal como às 21h52min de 22 de abril de 2025
Organização do Projeto
Essa sessão define os conceitos e organização da implementação do código, tanto da engine PlayTale, quanto do primeiro jogo sendo desenvolvido para ela, o Mystery Realms.
Estrutura de Projeto
- O sistema é dividido em dois projetos Maven separados:
- PlayTale: biblioteca independente da engine, reusável em outros jogos.
- MysteryRealms: jogo que utiliza a engine PlayTale.
Base dos Pacotes
- br.eng.rodrigogml.playtale - Pacote base da Engine
- .vos - Pacote base para alocação dos VOs da Engine.
- br.eng.rodrigogml.mysteryrealms - Pacote base do jogo Mystery Realms
- .vos - Pacote base para alocação dos VOs do jogo.
Estrutura Maven
- Diretórios:
- src - arquivos fonte do jogo e da engine.
- srcTest - arquivos fonte de testes unitários.
- etc - estrutura para documentos, scripts e outros materiais do projeto.
Configurações de Build
- Codificação de arquivos: UTF-8
- Versão Java: Java 1.8
- Gerenciador de build: Maven
- Geração de pacotes JAR com estrutura modular por projetos.
Tecnologias Utilizadas
Engine (Back-end)
- Java 8+ – linguagem principal da engine PlayTale
- GSON – manipulação de JSON
- Servidor HTTP Java (com.sun.net.httpserver) – servidor leve embutido para API
- RFW Framework – framework proprietário com:
- Estrutura de VOs
- Validações e Exceptions
- Serialização e Persistência
- Logger e Pré-processamento
- Serialização por arquivos locais – persistência dos objetos do jogo em disco, usando estrutura organizada por diretórios.
Interface (Front-end)
- Vue.js 3 – framework reativo para criação da interface
- Quasar Framework – framework baseado em Vue que permite:
- Criação de UI Web responsiva
- Exportação para Android/iOS (via Cordova ou Capacitor)
- Componentes customizáveis para visual de jogo (barras de vida, botões personalizados etc.)
- JavaScript ES6+ – lógica de chamada de APIs
- Fetch API – comunicação com servidor via JSON
Ferramentas de Desenvolvimento
- Visual Studio Code (VS Code) – IDE principal de desenvolvimento
- Plugins: Volar (Vue 3), Debugger for Chrome, Quasar Extension Pack
- Vue Devtools – extensão de navegador para debug em tempo real
- Quasar CLI – ferramenta para desenvolvimento, empacotamento e publicação da interface
Padrões de Código Desenvolvimento
JavaDoc
- Sempre gere javadoc em português nos atributos, classes e métodos utilizando as informações presentes na documentação wiki com explicação mais detalhada possível sobre sua finalidade, funcionamento e limitações. Pode inclusive colocar referências para as páginas wiki com mais informações.
- No javadoc a referência para os links deve ser a url completa e não o modelo de link wiki. Exemplo: no wiki a página Ficha_do_Jogador deve ser escrita com a tag <a href> com o link 'https://mysteryrealms.rodrigogml.eng.br/index.php?title=Ficha_do_Jogador', e target para abertura em nova janela.
- JavaDoc de Classe
- Nos javadoc de classe devem ser inclusas a tag '@author' com o nome Rodrigo Leitão, e a tag '@since' com a data atual no formato 'YYYY-MM-DD' (Ex: 2025-04-22)
Regras de Escrita de Código
- Sempre escrever código em inglês.
- Não gere os métodos getter e setter nos Beans/VOs.
- Utilizar sempre BigDecimal para números decimais, nunca utilizar float.
- Sempre utilizar LocalDate, LocalDateTime e LocalTime para os atributos de tempo/data.
- Atributos que tem uma quantidade limitada de valores aceitos (enumerações como tipos de armas, raridades, etc.) procure criar estrutura de 'enum' estática e pública dentro da própria classe, quando não reaproveita enum de outra classe.
Nomeação e Estrutura de Classes
- Todos objetos de dados devem usar o sufixo VO (ex: `PlayerVO`).
- VOs devem estender obrigatoriamente a classe base: RFWVO.
Exceções
- Toda exceção deve ser uma subclasse de RFWException.
- RFWException é abstrata — use subclasses específicas.
- Subclasses válidas:
- RFWCriticalException – erros críticos ou inesperados.
- RFWWarningException – falhas de ambiente, não de lógica.
- RFWSecurityException – violação de segurança ou acesso.
- RFWValidationException – validações de entrada ou estado.
- RFWValidationGroupException – múltiplas validações agrupadas.
- A única exceção fora dessa hierarquia permitida é RFWRunTimeException, para usos forçados por APIs externas (ex: interfaces que não permitem `throws`).
Construtores de Exceções
- Usar sempre que possível:
new RFWValidationException("CAMPOS_INVALIDOS", new String[]{"nome"}, originalException);
- Sempre passar o código de erro seguindo padrão: `[A-Z0-9_]+`.
- Parâmetros para i18n devem ser informados via `String[]`.
- Sempre passar a `Throwable` original quando disponível.