Duvida sobre validadores

Olá pessoal do guj, como sempre estou aqui com uma pequena duvida que parece ser meio idiota, mas sou iniciante. Estou criando um validador de cpf, mas eu tenho uma duvida se criar uma classe utilitaria com construtor private e um metodo static isValidCpf() ? ou se devo colocar o validador no controlador. Eu sei que é meio ingenuo, mas gostaria de saber a opiniao de vcs, estou arquitetura MVC.

Quer disser estou usando arquitetura MVC, corrigindo o que escrevi acima

Um tipo de classe Validadora no seu caso, na minha opinião fica normal fazer uma classe com método static, porém uma boa prática de Java é evitar o máximo trabalhar com Statics pois é algo herdado da programação procedural do C/C++ e criar um método dentro de um controlador é bom, porém vai que amanhã você pretende usar o mesmo método em outro controlador?

A boa prática seria por exemplo criar uma classe utilitária com todos os validadores que você criou, e instanciando eles no controlador desejado utilizando Injeção de Dependência.

Por exemplo se você estivesse usando o VRaptor como framework MVC você criaria uma classe utilitária com a anotação @Component “injetaria” nos contrutores das classes controladoras que pretende utilizar.

Entendi sua ideia, mas estou desenvolvendo desktop, nao conheço o vraptor, mas ele é para desenvolvimento web, eu acho, é possível fazer injeçao de dependencia nessas aplicações, melhor usar entao o spring framework e injetar nos controladores ? O que vc acha ?

Praticamente pelo que sei não existe framework MVC para desktop uma pq esse conceito MVC (Model-View-Controller) é para desenvolvimento web.

Se esta desenvolvendo para desktop, trabalhar com static para isso já resolve, pois a complexidade da injeção de dependência vai ser mais custoso para desktop, isso devido a ausência de frameworks que facilitem isso, porém eu posso estar errado e se alguém souber de algum framework eu gostaria de conhecer.

Eu tambem pensei nisso, é muito complexo usar injeçao de dependencia em desktop, talvez nao tenha sentido para uma aplicaçao simples

Já é complexo desenvolver para Desktop, isso é quando você faz tudo via código sem utilizar Netbeans, agora trabalhar o conceito de injeção de dependência só vai trazer mais complexidade que no futuro irá dificultar na manuntenção do projeto.

Agora quando se fala de projeto web, a maioria dos frameworks já estão maturos o suficiente para aplicar esse e outros conceitos, de forma simples e eficiente.

Na boa, utilize statics mesmo que resolverá o seu problema do jeito mais simples.

O C++ não é procedural. E não é uma boa prática trabalhar com static em C++ também.
Em C, não existe static (existem variáveis static, mas não as usamos exatamente da mesma forma).

O que normalmente dizemos é que declarar todo código como static torna o código procedural. Você deixa de ter objetos, para ter apenas funções, dentro de namespaces (no caso, as classes passam a agir como pacotes).

O Swing é inteiro desenvolvido no modelo MVC. Esse modelo surgiu no desenvolvimento desktop, já no SmallTalk, muito antes de falarmos em aplicação web.
É por isso que no Swing, implementamos um TableModel e um ComboBoxModel.

O que ocorre em código desktop é que podemos simplificar drasticamente a camada de controle.
Isso porque não existe um protocolo de transporte entre a view e o model (no caso da web, o usuário pode utilizar uma URL diretamente, driblando a validação feita na view). Também simplifica a passagem de eventos, que pode ser feita apenas com chamadas de funções. Por isso, o modelo MVC implementado no Swing foi simplificado.

Sim, é melhor usar o Spring. Já fiz algumas aplicações desktop com suporte a plugins que usam injeção de dependência, em várias camadas.
Agora, eu geralmente também opto por manter os controladores simplificados e isso até hoje nunca me causou problemas.

statics são restritos apenas a algumas fábricas, que substituem construtores.

ViniGodoy, obrigado pelas considerações, você esclareceu tudo aquilo que eu sabia mais ou menos, utilizando as palavras corretas.

:slight_smile:

Esses conceitos geram mesmo muita confusão.

Só um detalhe. Estou movendo esse tópico.
Falar em modelo de camadas e aplicações desktop não é assunto do fórum de Java Básico (em Java Básico, posta-se dúvidas sobre a sintaxe básica da linguagem, classes simples como String e List).

Os locais corretos seriam o fórum de interface gráfica (o que evitaria a dúvida do Caio, quando pensou que a aplicação era web), ou o fórum de arquitetura.
wolfx0, por favor, leia com atenção a lista de fóruns antes de postar.