Estou dentro do padrão de programação?

Olá, resolvi criar este tópico, pois estou desenvolvendo um software há um tempo, e aprendi java por conta própria, e nunca estudei nenhum livro sobre padrões de pogramação como as apostilas fj da Caelum.

Como eu sempre gostei de “fuçar” em códigos e etc… e gosto mto de jogos, percebi que todos possuem uma classe chamada ‘engine’ onde praticamente tudo que envolve lógica esta inserido, então em minha mente ficou gravado isso, pois engine=motor, ou seja o motor que faz funcionar toda a ‘coisa’.

Agora em meu software, a primeira coisa que fiz ao criar um novo projeto no netbeans, foi criar a classe engine no pacote principal, depois criei outro pacote e fiz a classe que faz conexão com o bd e dentro desse pacote criei outra classe onde faço os comandos SQL, entao meu software ficou dividido desse modo(em termos de classes):

Pacote Principal:
   ->engine.java
   ->Login.java
   ->Menu_Principal.java
   ->...outros forms.

Pacote Banco:
   ->Conecta_BD.java
   ->Comandos_BD.java
   ->Propriedades_BD.properties

Pacote Adicionais:
   ->SplashScreen.java

Pacote Admin:
   ->Login.java
   ->Admin_Menu.java
   ->...outros forms

No pacote Principal tenho forms voltados para usuarios comuns
No pacote Admin tenho forms restritos a administradores
No pacote Banco tenho codigos relacionados a MySQL
No pacote Adicionais tenho a SplashScreen do sistema

Porém, ao longo do meu processo de programação axo que me exaltei e nao segui minhas próprias regras de toda a lógica estar inserida no engine, entao no começo eu registrava tudo la antes de executar algo, entao por exemplo no login, eu verificava se os campos estavam preenchidos e etc, e no caso tru eu mandava pro pacote Banco na classe Comandos_BD.

Porem, em alguns forms eu acabei realizando verificações dentro da própria classe antes de verificar no engine, e em algumas vezes ao programar a ação de um botão, que simplesmente deveria checar algo no BD, eu primeiro envia-va á um método no engine, e esse método enviava os parametros a outro metodo do Comandos_BD ao qual retornava true ou false pro engine, e o engine enviava a classe o form, entao ficou esse caminho gigante.
E também algumas vezes realizei autenticação de itens selecionados em ComboBoxs dentro do form, ao inves de fazewr pelo engine, assim como no Comandos_BD fiz alguns sets de modo direto em classes, quebrando a regra de que o Comandos_BD deveria somente realizar selects/inserts/updates no MySQL.

Então após toda essa apresentação e desabafo, pergunto a vocês, estou programando corretamente, ou devo re-estruturar todo o código?

Deve reestruturar o código.

Existem diferentes termos:

  • Library/API: Conjunto de classes ou funções que vc pode usar (exemplo, a API de collections);
  • Framework: Conjunto de classes que você pode usar, mas será obrigado a fazer extensão: Por exemplo, Swing;
  • Engine: Uma library ou framework que controle ou rode num loop;

No caso dos jogos, existem diferentes engines: Física (como a havoc), Engines gráficas (Ogre, JMonkeyEngine, Java2D) e pequenas bibliotecas que os programadores irão usar, como no caso da IA.
Essas engines são formadas por centenas, as vezes, milhares de classes. Não uma grande classe só, como vc fez.

Dê uma olhada na quantidade de classes da Ogre, por exemplo: http://www.ogre3d.org/docs/api/html/annotated.html

Se você der uma lida mais a fundo no meu site, e baixar os meus jogos ou do Bruno, vai ver que nenhum deles tem uma classe chamada “Engine”.

Sua organização de classes ainda lembra das aplicações estruturadas. Normalmente, dividimos o sistema em classes de serviço (threads, listas, matemática, dependendo do caso), classes de negócio (que representam entidades do sistema tais como Cliente, Fornecedor, Usuário, etc…), classes de persistência (os famosos “DAO”: ClienteDAO, UsuarioDAO, classes para controle do banco, etc.), classes de interface gráfica e, se for o caso de sistemas web, classes de controle. Dê uma lida no livro de UML e Padrões do Craig Larman, ele dá uma boa visão de organização geral. E seria legal começar a estudar mais a fundo os conceitos básicos de padrões de projeto, análise e projeto de sistemas. Um bom programador não fica só “fuçando”. Ele até pode começar assim, mas como vc mesmo já notou, fuçar não nos conta quais são as melhores práticas, os livros sim.

Obrigado pelos conselhos, vou começar a estudar, rsrs