Como ser um maluco da contra-cultura

58 respostas
S

Sempre que vejo muita gente (a maioria) fazendo alguma coisa desconfio na hora. Alguns exemplos:

:arrow: 90% da população mundial é religiosa (teista). Eu não sou religioso (teista) (não confundir com ateu, pois sou deista)

:arrow: 80% aprovam Lula. Eu acho que Lula e o PT é o que há de pior em termos de política. Os princípios do PT são os mesmos princípios de Hitler: Um bom fim justifica qualquer meio.

:arrow: Eu nao gosto de Hibernate. http://amplicate.com/hate/hibernate. Por que eu odeio hibernate vai consumir 10 páginas. http://maryniuk.blogspot.com/2009/09/orm-sucks-hibernate-sucks-even-more.html

:arrow: Eu nao gosto de Spring. O pessoal que trabalha no Google também. Vide Guice.

:arrow: Eu nao gosto de Maven. Uma minoria também: http://stackoverflow.com/questions/1163173/why-use-gradle-instead-of-ant-or-maven

:arrow: Eu nao gosto de log4j. Se eu quero logar alguma coisa faço assim: Debug.log(asdf, asdf, asdf, asdf) and that’s it. log4j.properties me irrita.

:arrow: Eu nao gosto de XML e Annotations. Acho que código tem que ser limpo e qualquer tipo de configuração / setup tem que ser feita via configuração programática, independente e separada, com properties externalizadas por ambiente. (vide http://www.mentaframework.org/)

58 Respostas

A

Oi saoj,

90% da população mundial é religiosa (teista). Eu não sou religioso (teista) (não confundir com ateu, pois sou deista)

Fiz uma pesquisa rapida e não consegui entender direito o que é deista,será que você pode explicar… :roll:

A

A maioria das pessoas que conheço critica as coisas que a maioria das pessoas faz…rs

Os seus dois primeiros exemplos não vou comentar pois, além de quebrar as regras do fórum, costumam partir para o lado emocional mais do que racional.

Acredito que a maioria nem usa Hibernate…Usam JDBC, com statement e nem frequentam o guj…

Acho que o Hibernate está no meio do caminho ainda… Melhor do que escrever queries na mão, mas ainda não alcançou a perfeição.
Mas não quero daqui a 10 anos continuar precisando escrever queries pra acesso…essa parte tem que ficar totalmente transparente uma hora ou outra.

Tem uma boa questão aí: quando o spring surgiu, que opções nós tinhamos?
É quase obrigação criar algo melhor depois que um pioneiro apareceu para dar a cara a tapa.
Já viu todos os pontos fortes e fracos da solução anterior.
(Detalhe: Não trabalhei com o Guice, não posso dizer se é melhor ou não)

Também não gosto de Annotations, mas por enquanto é um mal necessário…

Não vejo onde properties levam vantagem sobre XML. Prefiro o segundo. (Questão de gosto)

Agora o que me fez responder este post, foi seu comentário em outro tópico , sobre como Mavem é muita mágica para você.
Não vejo isso só de você, muitos programadores vivem dizendo que gostam de ter controle sobre o que faz.

Me veio na cabeça um imaginário programador C++ há 10/15 atrás dizendo:
Java? Garbage Collection? Gerenciamento de Memória? Não obrigado, gosto de saber quando as coisas entram e saem da memória…

Ouvi em algum lugar que “Qualquer tecnologia suficientemente avançada é indistiguível da mágica”.

Eu particulamente desejo que mais e mais ferramentas avançadas e mágicas apareçam e facilitem meu trabalho.
Não tenho problema nenhum em concorrer com monkeys.
Se a ferramenta for fácil o bastante para eles fazerem softwares de qualidade, imagina o que eu não farei com elas?

S

Anime:
Oi saoj,

90% da população mundial é religiosa (teista). Eu não sou religioso (teista) (não confundir com ateu, pois sou deista)

Fiz uma pesquisa rapida e não consegui entender direito o que é deista,será que você pode explicar… :roll:

H

Deista é aquele que acredita em Deus, porém questiona alguns dogmas, como a revelação divina, ou a criação.
Deistas, na maioria das vezes são pessoas que veem a coisa pelo lado científico, não se conformando apenas com a frase “Porque Deus quis”, porem, acreditam que exista alguma força divina agindo de alguma forma.

Um exemplo seria a criação do universo, tudo veio do Big Bang(cientificamente) porem, e antes do big bang??

Eu vejo uma das primeiras frases da biblia em Genesis que diz “E Deus disse, que se faça a luz, E (Big Bang) a luz se fez”, e penso que o resto foi consequência.

Com relação aos outros pontos, acredito que cada um usa o que é melhor para a sua necessidade, não necessariamente porque muita gente usa é ruim, pode ser bom pra mim, mas ruim pra vc.
Eu já gosto de Hibernate, porem, existem casos em que não vale a pena usa-lo.
Não sou fã do log4j tb.
Gosto da ideia de que o codigo tem que ser limpo, mas acho que annotations são melhores do que XMLs

S

Há dezenas de excelentes query builders e query helpers. Vou citar dois que eu conheço e gosto: iBatis e MentaBeans.

O Spring tem o mérito de ter popularizado o conceito de IoC. Eu não gosto do Spring porque ele é um monstro controlado por XML. Parece que agora, depois do sucesso do Guice, o pessoal do Spring resolveu lançar o tal do JavaConfig, que é o Spring con configuração programática.

Para configuração estática, usar XML é um overkill. Não faz qualquer sentido.

O problema é que XML é usado pra tudo. Desde build.xml até app-context.xml. Péssimo !!!

Annotation é um pouco melhor, mas ainda é markup. A solução é configuração independente e separada por código.

Abstrair complexidade com algo tão ou mais complexo é loucura.

Nesse caso a mágica foi perfeita !!! Abstraiu totalmente essa complexidade SEM INTRODUZIR NENHUMA OUTRA.

No caso do Hibernate abstrai-se a complexidade do banco-de-dados, introduzindo outra. Claro que muitos dirão que vale a pena pagar esse preço para ter uma coisa mais OO.

Boa observação. Tenho que concordar com vc. Se a coisa for bem-feita e realmente abstrair a complexidade então todo mundo sai ganhando. O que eu não gosto é trocar uma complexidade por outra. Quando vc muda de assembly para Java, vc claramente está trocando uma complexidade por outra MUITO MENOR. Mesma coisa com memory management.

A questão do Maven é igual a questão do Maker. Troca-se complexidade por mágica. O problema é que a coisa fica totalmente engessada. Eu acho que FLEXIBILIDADE é fundamental.

No caso de Garbage Collection, vc não precisa de flexibilidade para memória. Isso só foi possível porque memória virou algo abundante, então usa-se sem qualquer preocupação.

A

Obrigada saoj e Hildebrando Pedroni, entendi…

J

Nossa, quanto ódio no coração! rsrssrrsrs

Relaxa bro. Tá muito tenso. Num gosta? Esquece!

B

saoj:
Sempre que vejo muita gente (a maioria) fazendo alguma coisa desconfio na hora. Alguns exemplos:
:arrow: 80% aprovam Lula. Eu acho que Lula e o PT é o que há de pior em termos de política. Os princípios do PT são os mesmos princípios de Hitler: Um bom fim justifica qualquer meio.

Assino em baixo.

O problema é que as pessoas que utilizam o Hibernate acham que ele é e tem solução para todos os problemas no que se refere a persistência e acesso os BD…
iBatis é uma ótima opção

Vejo que o Spring nasceu, cresceu e virou um “monstro”…

Acho um lixo, totalmente dispensável… plugins + plugins + plugins para fazer um build… (rs)

Deste eu não abro mão log4j … THE BEST!!!

O problema é abusam das Annotations utilizando-as de forma errada e indiscriminada.
XML como arquivo de configuração ainda passa, mas um simples arquivo de properties vai melhor.

F

saoj:
Sempre que vejo muita gente (a maioria) fazendo alguma coisa desconfio na hora. Alguns exemplos:

:arrow: 90% da população mundial é religiosa (teista). Eu não sou religioso (teista) (não confundir com ateu, pois sou deista)


+1, eu costumo chama-lo de “O Todo”, mas vamos deixar isto para outra hora :wink:

+100

Neste caso tenho que admitir que estou na correnteza junto com a maioria, e nunca fui atraz de outra coisa para subtitui-lo.
Mas agora, estudando scala, estou vendo que existe um mundo la fora, com coisas bem legais e simples :smiley:

What is Spring? Seria primavera? Não sei dizer nada, pois nunca usei, acreditem.

Em Scala os caras criaram o Simple Build Tool(SBT), suporta projetos misto Java/Scala, não sei se daria para usa-lo em projetos puramente java. Nele toda a configuração é feita programaticamente, em Scala.

Parece que o pessoal de Scala tem essa mentalidade, vide SBT, e tambem o framework web Lift onde as config tambem são feitas programaticamente em Scala, num arquivo chamado Boot.scala.
Sobre annotations, eu não acho ruim uma anotaçãozinha aqui outra acola, mas ver um Entity anotado com Named Queries e tudo mais, realmente é muito poluido.

L

na real a politica em si é um MERDA BEM GRANDE e SEMPRE SERÁ …

odeio todos esse porras safados,eu conheço pq ja trabalhei la dentro e sei como que é…e são msm!!!

abrxx

F

saoj:
Sempre que vejo muita gente (a maioria) fazendo alguma coisa desconfio na hora. Alguns exemplos:

:arrow: 90% da população mundial é religiosa (teista). Eu não sou religioso (teista) (não confundir com ateu, pois sou deista)

Sim, eu sou ateu.

Acho que esse molusco deve voltar para o mar e parar de atrapalhar o desenvolvimento do pais.

saoj:

:arrow: Eu nao gosto de Hibernate. http://amplicate.com/hate/hibernate. Por que eu odeio hibernate vai consumir 10 páginas. http://maryniuk.blogspot.com/2009/09/orm-sucks-hibernate-sucks-even-more.html

Sonho todo o dia com algo melhor :smiley:

saoj:

:arrow: Eu nao gosto de Spring. O pessoal que trabalha no Google também. Vide Guice.

Eu mechi pouco no Spring, na epoca não havia annotations, mas configurar aquele caminhão de XML é uma droga

Eu curto o maven, mas achei o Gradle interessante, só queria saber se ele gera JNLP, não achei nada disso.

Sempre uso a API padrão

Também acho que XML e Annotations, se tornaram mais lixo que ajuda, o pessoal estrapola, mas em muitos casos é muito util, principalmente annotations, mas sem exagero, quando posso optar por uma solução mais programada, prefiro.

S

Eu uso o MentaBean, que é um query helper para quem gosta e sabe escrever SQL. Veja o exemplo abaixo:

public List<Performance> loadMine(int user_id) throws Exception {
    	
    	Connection conn = getConn();
    	
    	PreparedStatement stmt = null;
    	ResultSet rset = null;
    	
    	try {
    		
    		StringBuilder query = new StringBuilder(512);
    		
    		query.append("select ").append(session.buildSelect(Performance.class, "p"));
    		
    		query.append(", ").append(session.buildSelect(User.class, "u"));
    		
    		query.append(" from performances p, users u");
    		
    		query.append(" where p.user_id = ? and p.status in (?,?,?,?)");
    		
    		query.append(" and p.user_id = u.id order by p.since");
    		
    		stmt = conn.prepareStatement(query.toString());
    		
    		int index = 1;
    		
    		stmt.setInt(index++, user_id);
    		stmt.setInt(index++, Status.ASSIGNED);
    		stmt.setInt(index++, Status.RE_ASSIGNED);
    		stmt.setInt(index++, Status.BEING_REVIEWED);
    		stmt.setInt(index++, Status.ESCALATED);
    		
    		rset = stmt.executeQuery();
    		
    		List<Performance> list = new LinkedList<Performance>();
    		
    		while(rset.next()) {
    			
    			Performance p = new Performance();
    			
    			session.populateBean(rset, p, "p");
    			
    			User u = new User();
    			
    			session.populateBean(rset, u, "u");
    			
    			p.setUser(u);
    			
    			list.add(p);
    		}
    		
    		return list;
    		
    	} finally {
    		
    		close(rset, stmt);

    	}
    }
S

Eu, há 5 anos atrás, fui chamado de maluco, mas agora até o Spring partiu para configuração programática. :expressionless:

Mais informações: http://forum.mentaframework.org/posts/list/2401.page

F
saoj:
"Private Messsage":
vi que você não é fã do Hibernate, e nisso concordamos, gostaria de saber se você usa algum outro tipo de framework de persistencia.

Eu uso o MentaBean, que é um query helper para quem gosta e sabe escrever SQL. Veja o exemplo abaixo:

public List<Performance> loadMine(int user_id) throws Exception {
    	
    	Connection conn = getConn();
    	
    	PreparedStatement stmt = null;
    	ResultSet rset = null;
    	
    	try {
    		
    		StringBuilder query = new StringBuilder(512);
    		
    		query.append("select ").append(session.buildSelect(Performance.class, "p"));
    		
    		query.append(", ").append(session.buildSelect(User.class, "u"));
    		
    		query.append(" from performances p, users u");
    		
    		query.append(" where p.user_id = ? and p.status in (?,?,?,?)");
    		
    		query.append(" and p.user_id = u.id order by p.since");
    		
    		stmt = conn.prepareStatement(query.toString());
    		
    		int index = 1;
    		
    		stmt.setInt(index++, user_id);
    		stmt.setInt(index++, Status.ASSIGNED);
    		stmt.setInt(index++, Status.RE_ASSIGNED);
    		stmt.setInt(index++, Status.BEING_REVIEWED);
    		stmt.setInt(index++, Status.ESCALATED);
    		
    		rset = stmt.executeQuery();
    		
    		List<Performance> list = new LinkedList<Performance>();
    		
    		while(rset.next()) {
    			
    			Performance p = new Performance();
    			
    			session.populateBean(rset, p, "p");
    			
    			User u = new User();
    			
    			session.populateBean(rset, u, "u");
    			
    			p.setUser(u);
    			
    			list.add(p);
    		}
    		
    		return list;
    		
    	} finally {
    		
    		close(rset, stmt);

    	}
    }

Só pra ressaltar, que a mensagem privada foi minha :D.

esse seu modo de usar essas queries dinâmicas, não torna muito especifico? No seu where, vc tem campos fixos (pode ser só pelo exemplo, mas me chamou atenção).

Não acho que o JPA seja algo assim tão bom, por que aquele amontoado de anotação as vezes mais confunde e dificulta. Eu penso em algo mais KISS e DRY, o nome do Field ter algum padrão pra identificar o nome da coluna algo como numeroCPF ser o campo numero_cpf, por ai vai, até estruturei algo assim, mas não dei continuidade.

Sem falar que o Hibernate não é flexivel, não existe uma maneira de usa-lo por exemplo num NOSQL, a não ser que crie um driver JDBC que converta SQL em queries que o Banco NoSQL entenda. Algo muito chato e inapropriado...

S

Se mudar o nome do campo no banco-de-dados vc vai ter que mudar na query. Poderia ter até alguma coisa para te retornar o campo do banco para o campo do objeto…

Qual é a sua preocupação? Refactoring do nome do campo no DB?

F

saoj:

esse seu modo de usar essas queries dinâmicas, não torna muito especifico? No seu where, vc tem campos fixos (pode ser só pelo exemplo, mas me chamou atenção).

Se mudar o nome do campo no banco-de-dados vc vai ter que mudar na query. Poderia ter até alguma coisa para te retornar o campo do banco para o campo do objeto…

Qual é a sua preocupação? Refactoring do nome do campo no DB?

Dependo a quantidade de queries parametrizadas que você tem o refactoring é pesado para ser feito somente em tempo de execução, para saber quais consultas quebram com alteração no banco. Também é possivel corrigir com um Teste Unitário como faço pro Hibernate, definindo os tipos das colunas dos objetos já que ele não consegue converter.

mas não vejo vantagem sobre usar Queries SQL nativas dessa forma, acho muito pouco OO. E normalmente é mais propenso a erros de digitação.

A

saoj:

Parece que o pessoal de Scala tem essa mentalidade, vide SBT, e tambem o framework web Lift onde as config tambem são feitas programaticamente em Scala, num arquivo chamado Boot.scala.
Sobre annotations, eu não acho ruim uma anotaçãozinha aqui outra acola, mas ver um Entity anotado com Named Queries e tudo mais, realmente é muito poluido.

Eu, há 5 anos atrás, fui chamado de maluco, mas agora até o Spring partiu para configuração programática. :expressionless:

Mais informações: http://forum.mentaframework.org/posts/list/2401.page

heuheueheueheu saoj sempre aproveitando pra fazer Marketing do Menta…

Cara, não se preocupe, você não é o único, eu mesmo já me imaginei sendo um lunático… Aprendi Hibernate por pressão e Spring também… Gosto de anotações (pelo menos prefiro ao XML) e até agora não enxerguei a vantagem de usar o Maven… Ah… e assim que sobrar um tempo vou dar uma olhada no Menta…

Abs :wink:

M

Gosto muito do JDBC, tanto que desenvolvemos classes para facilitar o trabalho. Não estou nem aí se fazer queries é pouco “OO”, acredito que o poder que tenho assim é muito maior que o que pode ser feito pelo Hibernate.

Também não gosto de XML para configurações, acho um saco ficar mexendo naquilo.

Inté.

A

marciosantri:
Gosto muito do JDBC, tanto que desenvolvemos classes para facilitar o trabalho. Não estou nem aí se fazer queries é pouco “OO”, acredito que o poder que tenho assim é muito maior que o que pode ser feito pelo Hibernate.

++ :wink:

L

mas agora eu fiquei curioso… pq vc não gosta do hibernate e do spring?

A

É pra mim essa pergunta ou para o colega…

Acho que foi para o colega,né…desculpe… :roll:

A

Eu nunca gostei de trabalhar com aquelas doses cavalares de XML. O Spring é um excelente framework, mas configurar ele sempre foi horrível.

Ultimamente ando tendo tantos problemas com projetos que dependem de outros no Maven que estou começando a não gostar dele também. Acho que se eu não usasse o Hudson já teria deixado de usar o Maven há tempos.

O Log4J é bacana, o properties é até simples de montar pra ter uma configuração aceitável.

XML eu realmente não gosto, mas Annotations sim (desde que usadas de forma saudável). O chato de usar Annotations é quando o pessoal abusa. Já vi classes com mais Annotations do que código.

M

Cara sendo mais extremista, por que diabos framework? Por que não fazer todas as tarefas de persistência com um mero driver de jdbc e scripts sql em java? Por que não usar apenas servlets e jsp para construir aplicações web? Por que não programar em Java sem todos esses frameworks estúpidos, que em lugar de automatizar tarefas nos leva a resolver mais problemas de conflito entre frameworks do que de aplicação? Hibernate? JSF? Seam? Eu seria mais avançado em dizer pra que IDE?
Já que é pra ser do contra, vamos ser radicalmente.

A

[ironia mode=on]
Ou, sendo ainda mais radical, pra que usar essas linguagens de alto nível quando se tem muito mais poder nas mãos usando o bom e velho Assembler??
[/ironia]

[]´s

A

Parando de trollar um pouco (ou não):

Acho que só não gosta de um framework quem não sabe usar e/ou não sabe pra que serve. Ex.: quem foi aí que comentou que o Hibernate é pouco flexível pq não suporta NoSQL, mesmo??

[]´s

M

Concordo com o asaudate

L

asaudate:
Parando de trollar um pouco (ou não):

Acho que só não gosta de um framework quem não sabe usar e/ou não sabe pra que serve. Ex.: quem foi aí que comentou que o Hibernate é pouco flexível pq não suporta NoSQL, mesmo??

[]´s

E seguindo essa linha, isso se aplica também ao Spring, ao Maven e qualquer outra API/Framework por aí.

É que o Java sofre de um problema desde que foi lançado: Todo “Hello World” no Java é muito complicado e não é intuitivo. Vá fazer um Hello World com Hibernate, com Spring, com JSF e veja o parto que é pra fazer funcionar.

Entretanto, eu gosto de XML. Sim é gosto, mas paciência. Não gosto de utilizar as anotações do Spring (somente em casos especiais, no máximo um @Autowired), mas mesmo que haja XML (oh maldito XML!) você só configura uma vez! Não é toda hora. Mesma coisa quando falamos de Spring, de Maven, de Hudson ou da mãe Dinah. O pessoal mete pau nos frameworks porque acha que tem que configurar toda hora os XMLs, como se pra cada linha de código que tu escreves, tens que colocar mais uma entrada no XML.

Meter pau quando não se sabe utilizar algo é comum, eu mesmo já fui assim. Eu por exemplo já odiei maven e git por não saber usá-los direito, por isso que não crucifico ninguém aqui. Não passa de um preconceito bobo. Se quiserem continuar usando JDBC, gerenciando pools na mão, criando mil anotações e criando APIs menta*, fiquem a vontade :smiley:

Abraço

F

asaudate:
Parando de trollar um pouco (ou não):

Acho que só não gosta de um framework quem não sabe usar e/ou não sabe pra que serve. Ex.: quem foi aí que comentou que o Hibernate é pouco flexível pq não suporta NoSQL, mesmo??

[]´s

Eu disse :smiley:

S

Aos poucos todo mundo está abandonando o XML e partindo para configuração programática. Spring => Spring JavaConfig ou Guice, Maven => Gradle.

Ninguém vai fazer isso: usar JDBC puro, com o seu próprio pool de conexões é perda de tempo. Pra isso existe abstração.

public List<Performance> loadMine(int user_id) throws Exception {
    	
    	Connection conn = getConn();
    	
    	PreparedStatement stmt = null;
    	ResultSet rset = null;
    	
    	try {
    		
    		StringBuilder query = new StringBuilder(512);
    		
    		query.append("select ").append(session.buildSelect(Performance.class, "p"));
    		
    		query.append(", ").append(session.buildSelect(User.class, "u"));
    		
    		query.append(" from performances p, users u");
    		
    		query.append(" where p.user_id = ? and p.status in (?,?,?,?)");
    		
    		query.append(" and p.user_id = u.id order by p.since");
    		
    		stmt = conn.prepareStatement(query.toString());
    		
    		int index = 1;
    		
    		stmt.setInt(index++, user_id);
    		stmt.setInt(index++, Status.ASSIGNED);
    		stmt.setInt(index++, Status.RE_ASSIGNED);
    		stmt.setInt(index++, Status.BEING_REVIEWED);
    		stmt.setInt(index++, Status.ESCALATED);
    		
    		rset = stmt.executeQuery();
    		
    		List<Performance> list = new LinkedList<Performance>();
    		
    		while(rset.next()) {
    			
    			Performance p = new Performance();
    			
    			session.populateBean(rset, p, "p");
    			
    			User u = new User();
    			
    			session.populateBean(rset, u, "u");
    			
    			p.setUser(u);
    			
    			list.add(p);
    		}
    		
    		return list;
    		
    	} finally {
    		
    		close(rset, stmt);

    	}
    }
A

asaudate:
Parando de trollar um pouco (ou não):

Acho que só não gosta de um framework quem não sabe usar e/ou não sabe pra que serve. Ex.: quem foi aí que comentou que o Hibernate é pouco flexível pq não suporta NoSQL, mesmo??

[]´s

Afff,como vc adivinhou,tem uma bola de cristal,rsrs…Pelo menos no meu caso é por isso,não tive tempo ainda para me dedicar,mas vou faze-lo,só não sei quando.
Mas já que é pra radicalizar,vamos usar o famoso “Genexus”…Já vi tudo,o povo vai falar mal do que não conhece. :wink:

OBS:também não acho que é ironia,se a pessoa não gosta,não importa o motivo,o importante é fazer seu trabalho bem feito,com ou sem framework.

L

Apesar de servir como orientada principalmente para aplicações corporativas, para web, plataformas Windows (GUI) e Plataformas móveis,

Não soui muito fãs a uso dela !!!

Genexus , na verdade eu odeio ela!! rsrsrs

A

saoj:
Leozin:

Entretanto, eu gosto de XML. Sim é gosto, mas paciência. Não gosto de utilizar as anotações do Spring (somente em casos especiais, no máximo um @Autowired), mas mesmo que haja XML (oh maldito XML!) você só configura uma vez! Não é toda hora. Mesma coisa quando falamos de Spring, de Maven, de Hudson ou da mãe Dinah. O pessoal mete pau nos frameworks porque acha que tem que configurar toda hora os XMLs, como se pra cada linha de código que tu escreves, tens que colocar mais uma entrada no XML.

Aos poucos todo mundo está abandonando o XML e partindo para configuração programática. Spring => Spring JavaConfig ou Guice, Maven => Gradle.

Ninguém vai fazer isso: usar JDBC puro, com o seu próprio pool de conexões é perda de tempo. Pra isso existe abstração.

public List<Performance> loadMine(int user_id) throws Exception {
    	
    	Connection conn = getConn();
    	
    	PreparedStatement stmt = null;
    	ResultSet rset = null;
    	
    	try {
    		
    		StringBuilder query = new StringBuilder(512);
    		
    		query.append("select ").append(session.buildSelect(Performance.class, "p"));
    		
    		query.append(", ").append(session.buildSelect(User.class, "u"));
    		
    		query.append(" from performances p, users u");
    		
    		query.append(" where p.user_id = ? and p.status in (?,?,?,?)");
    		
    		query.append(" and p.user_id = u.id order by p.since");
    		
    		stmt = conn.prepareStatement(query.toString());
    		
    		int index = 1;
    		
    		stmt.setInt(index++, user_id);
    		stmt.setInt(index++, Status.ASSIGNED);
    		stmt.setInt(index++, Status.RE_ASSIGNED);
    		stmt.setInt(index++, Status.BEING_REVIEWED);
    		stmt.setInt(index++, Status.ESCALATED);
    		
    		rset = stmt.executeQuery();
    		
    		List<Performance> list = new LinkedList<Performance>();
    		
    		while(rset.next()) {
    			
    			Performance p = new Performance();
    			
    			session.populateBean(rset, p, "p");
    			
    			User u = new User();
    			
    			session.populateBean(rset, u, "u");
    			
    			p.setUser(u);
    			
    			list.add(p);
    		}
    		
    		return list;
    		
    	} finally {
    		
    		close(rset, stmt);

    	}
    }

Jesus… você acredita mesmo que criar essa penca de código aí é melhor do que usar Hibernate???

A

Felagund:
asaudate:
Parando de trollar um pouco (ou não):

Acho que só não gosta de um framework quem não sabe usar e/ou não sabe pra que serve. Ex.: quem foi aí que comentou que o Hibernate é pouco flexível pq não suporta NoSQL, mesmo??

[]´s

Eu disse :D

Então, cara… o caso é que o Hibernate, como ferramenta ORM é feito para trabalhar somente com bancos de dados relacionais. Na verdade, existem tentativas de usar o Hibernate com bancos como o BigTable, do Google App Engine, mas o pessoal que já fez isso admite que fica muito ruim de trabalhar e admite, também, que é melhor usar outras estratégias.

Então, recapitulando… JPA (Hibernate) != Bancos NoSQL, OK ?

[]´s!!!

A

Anime:
asaudate:
Parando de trollar um pouco (ou não):

Acho que só não gosta de um framework quem não sabe usar e/ou não sabe pra que serve. Ex.: quem foi aí que comentou que o Hibernate é pouco flexível pq não suporta NoSQL, mesmo??

[]´s

Afff,como vc adivinhou,tem uma bola de cristal,rsrs…Pelo menos no meu caso é por isso,não tive tempo ainda para me dedicar,mas vou faze-lo,só não sei quando.
Mas já que é pra radicalizar,vamos usar o famoso “Genexus”…Já vi tudo,o povo vai falar mal do que não conhece. :wink:

OBS:também não acho que é ironia,se a pessoa não gosta,não importa o motivo,o importante é fazer seu trabalho bem feito,com ou sem framework.

Então, Anime… na verdade, eu estava falando um pouco de mim, mesmo, porque eu não gosto muito do Maven. Mas, certamente, admito que não sei usar muito bem e tampouco conheço o propósito muito bem. No entanto, conforme eu vou conhecendo algumas features, vou vendo que ele pode ser bem útil dadas certas condições de temperatura e pressão ideais =P

[]´s

S

Sim. Mas precisa saber como um banco de dados funciona e como usar SQL.

Com Hibernate vc tem que aprender HQL ou Criteria.

Menos código não é necessariamente melhor, pois vc precisa de flexibilidade.

E mais, olhando esse código vc entende exatamente o que está acontecendo. Vc está no controle. Agora usando o Hibernate ele faz o que quiser, usa mágica, cache, lazy loading, blah, blah, blah.

Eu acho o Hibernate excelente para quem nunca trabalhou com SQL ou não sabe como um banco-de-dados funciona. Quer abstração total e não precisa de flexibilidade, pois não vai saber o que fazer com ela. Mesma coisa dizer que o Maker faz o cara ganhar tempo.

Sei que muitos não vão concordar, pois vão dizer que as vantagens que o Hibernate lhe oferece pagam o seu custo. Assim como o Maven. :expressionless: Não concordo, mas essa é apenas minha opinião pessoal.

A

saoj:
asaudate:

Jesus… você acredita mesmo que criar essa penca de código aí é melhor do que usar Hibernate???

Com Hibernate vc tem que aprender HQL ou Criteria.

Ou como usar uma native query :roll:

EDIT: ou como usar JPAQL (que já é uma especificação padronizada e que um programador que se preze precisa aprender, mesmo que não vá usar).

R

Uau, que fantastico esse código.
Bem melhor que o equivalente em Hibernate:

public List<Performance> loadMine (int userId) {
    Criteria c = getSession().createCriteria(Performance.class);
    c.add(Expression.eq("user.id", userId));
    c.add(Expression.in("status", Collections.asList(Status.ASSIGNED, Status.RE_ASSIGNED, Status.BEING_REVIEWED, Status.ESCALATED)));
    return c.list();
}

Parabéns Sérgio! Você elevou o desenvolvimento Java a um outro patamar :slight_smile:

S

Obrigado, Rubem! Sei que vc tb gosta do Maker, pois vc não precisa fazer quase nada para colocar uma aplicação web rodando. Bem menos código para vc cansar os seus dedos digitando.

A

saoj:
Rubem Azenha:

Parabéns Sérgio! Você elevou o desenvolvimento Java a um outro patamar :slight_smile:

Obrigado, Rubem! Sei que vc tb gosta do Maker, pois vc não precisa fazer quase nada para colocar uma aplicação web rodando. Bem menos código para vc cansar os seus dedos digitando.

Também não precisa chutar o balde. O caso é que, de fato, se você aprende a usar a ferramenta corretamente (e tenho certeza que esse é o ponto onde o Rubem quer chegar) é muito mais produtivo do que ter que reinventar a roda a cada programa feito.

[]´s

S

asaudate:
saoj:
Rubem Azenha:

Parabéns Sérgio! Você elevou o desenvolvimento Java a um outro patamar :slight_smile:

Obrigado, Rubem! Sei que vc tb gosta do Maker, pois vc não precisa fazer quase nada para colocar uma aplicação web rodando. Bem menos código para vc cansar os seus dedos digitando.

Também não precisa chutar o balde. O caso é que, de fato, se você aprende a usar a ferramenta corretamente (e tenho certeza que esse é o ponto onde o Rubem quer chegar) é muito mais produtivo do que ter que reinventar a roda a cada programa feito.

[]´s

Recomendo aprender o Maker. Ou VisualBasic. Não precisa reinventar a roda. Digita muito pouco também. ColdFusion tb é uma boa.

A

saoj:
asaudate:
saoj:
Rubem Azenha:

Parabéns Sérgio! Você elevou o desenvolvimento Java a um outro patamar :slight_smile:

Obrigado, Rubem! Sei que vc tb gosta do Maker, pois vc não precisa fazer quase nada para colocar uma aplicação web rodando. Bem menos código para vc cansar os seus dedos digitando.

Também não precisa chutar o balde. O caso é que, de fato, se você aprende a usar a ferramenta corretamente (e tenho certeza que esse é o ponto onde o Rubem quer chegar) é muito mais produtivo do que ter que reinventar a roda a cada programa feito.

[]´s

Recomendo aprender o Maker. Ou VisualBasic. Não precisa reinventar a roda. Digita muito pouco também. ColdFusion tb é uma boa.

Eu já fui programador VB =P

Ah, e por falar nisso… você reparou que nenhum dos três que você citou têm o mesmo propósito?? Por isso que eu digo: saber o propósito também é importante!!

N

Bom, já que a conversa afunilou para frameworks…

Sempre pensei que a utilização de frameworks era para facilitar a vida do programador e não uma questão de estética ou melhor maneira de programar. É claro que há perdas em se utilizar frameworks, mas há ganhos também, sendo que, em tese, o principal deles é de ser ter um menor tempo de desenvolvimento de sistemas (você não precisa implementar tudo, porque já fizeram isso pra você, consequentemente escreverá menos código).

F

Saber SQL é legal e essencial, mas ficar fazendo CRUD o dia todo escrevendo um monte disso o dia inteiro enche o saco.

E aos que gostam de escrever o sql na unha, não se esqueçam de usar SQL/ANSI PURINHO, porque se começarem a usar features especificas do BD, rezem para um dia nao precisarem mudar de SGBD :shock: Imaginem o tamanho do refactory de um sistema grandinho, sair pescando as querys e mudando as coisas especificas de BD.

T

Bom, cada um na sua. A partir do momento em que uma das pessoas que estão participando da discussão diz “esta é minha opinião”, não há mais o que discutir.

O que eu acho interessante é que as críticas se referem ao esforço que é necessário empregar para aprender a usar o Hibernate, como se não fosse necessário empregar qualquer esforço para aprender JDBC ou qualquer dos correlatos substitutos.

L

nesta query ai é simples usar criteria mas em querys complexas e grandes não é muito bom… pois no final das contas o que o hibernate vai fazer e transformar o criteria em query… e se vc quer velocidade e performance e souber trabalhar bem com sql nativo não é bom usar critéria para consultas complexas…
já reftorei querys que usavam criteria e levavam até 15 min pra sql nativo onde rodavam em cerca de 1,5 min… usando algumas técnicas de otimização as quais o hibernate não usa pois para isto ele iria requerer uma heuristica um pouco mais avançada a qual não faz parte do escopo do framework…

S

Todo bom query helper vai te dar isso de bandeja.

Isso quase NUNCA acontece. O máximo que acontece é usar um outro DB para unit tests em memória. Eu uso H2 que suporta mode=MYSQL por exemplo.

Sim. Se vc não sabe nada, então é melhor partir para o Hibernate mesmo. O mercado aceita, etc. O problema é quem já sabia SQL, banco-de-dados, cache, blah, blah, e agora tem que esquecer isso e aprender um novo paradigma. O cara tem que se convencer que os benefícios superam os custos. Posso estar errado, mas não estou convencido disso. Pelo menos em todas as vezes que usei Hibernate.

A

saoj:

Sim. Se vc não sabe nada, então é melhor partir para o Hibernate mesmo. O mercado aceita, etc. O problema é quem já sabia SQL, banco-de-dados, cache, blah, blah, e agora tem que esquecer isso e aprender um novo paradigma. O cara tem que se convencer que os benefícios superam os custos. Posso estar errado, mas não estou convencido disso. Pelo menos em todas as vezes que usei Hibernate.

Exatamente o que penso.Tirando a parte,sobre já ter usado Hibernate. :wink:

R

saoj:

Sim. Se vc não sabe nada, então é melhor partir para o Hibernate mesmo. O mercado aceita, etc. O problema é quem já sabia SQL, banco-de-dados, cache, blah, blah, e agora tem que esquecer isso e aprender um novo paradigma. O cara tem que se convencer que os benefícios superam os custos. Posso estar errado, mas não estou convencido disso. Pelo menos em todas as vezes que usei Hibernate.

Errado, na minha opinião. O hibernate não tem nenhum paradigma novo. Ele é um framework de persistencia/ORM. Se você programa decentemente a tua persistencia, você vai implementar na mão várias coisas que o Hibernate já tem implementado out-of-the-box.
Quem conhece bem Hibernate e depois le o PoEAA percebe que ele implementa vários patterns complexos, alguns inclusive que você dificilmente se daria o trabalho de implementar na mão (principalmente o Unit of Work). Cache da forma como ele faz nem se fala. Lazy loading, carregar automaticamente relacionamentos, etc, são outras coisas bem legais dele. Sem falar nos projetos Hibernate Search, Hibernate Validator, etc.

Tudo isso tem um custo, ele tem uma forma de se trabalhar e você precisa configurar ele. Mas hoje em dia a configuração dele é ridiculamente simples. O Hibernate em si é um projeto grande, tem uma complexidade, devido ao conjunto de conceitos e funcionalidades que ele implementa. Por isso é preciso ler a documentação e consultar a documentação constantemente.

Eu vejo muito desenvolvedor que não tem muita paciência e vai reinventando a roda, codificando tudo do zero. Eu acho que quem faz isso não é por que já sabe SQL e JDBC, e sim por que não tem conhecimento das ferramentas disponíveis. Por preguiça, má vontade, gosto pessoal e outros motivos, prefere não gastar tempo aprendendo bem uma ferramenta bem estabelecida que já faz muito bem o que ele precisa.

E não da pra comparar Hibernate com VB e Maker. Abstrair e implementar conceitos encapsulando suas complexidades é uma coisa, ferramenta visual para gerar código é outra.

Não vejo problema nenhum em não gostar de ferramentas/conceitos bem estabelecidos. Mas quando falamos de tecnologia e desenvolvimento, temos que que ter um olhar mais técnico e menos emocional. Se não gostamos de uma ferramenta que todo mundo gosta, nós podemos estar certos, mas seria bom entendermos o que realmente não gostamos na ferramenta e ter a mente aberta, pode ser que nós simplesmente não conhecemos a ferramenta o suficiente ou nunca trabalhamos num ambiente em que ela é usada de forma correta.

M

Rubem Azenha:

Errado, na minha opinião. O hibernate não tem nenhum paradigma novo. Ele é um framework de persistencia/ORM. Se você programa decentemente a tua persistencia, você vai implementar na mão várias coisas que o Hibernate já tem implementado out-of-the-box.

Se vc não esta trabalhando em um novo paradigma usando hibernate então está fazendo algo errado. Afinal, é pra isso que ele implementa os padrões pra vc, para que possa trabalhar em um outro nivel de abstração.

A

Disse tudo!!

F

asaudate:
Felagund:
asaudate:
Parando de trollar um pouco (ou não):

Acho que só não gosta de um framework quem não sabe usar e/ou não sabe pra que serve. Ex.: quem foi aí que comentou que o Hibernate é pouco flexível pq não suporta NoSQL, mesmo??

[]´s

Eu disse :D

Então, cara… o caso é que o Hibernate, como ferramenta ORM é feito para trabalhar somente com bancos de dados relacionais. Na verdade, existem tentativas de usar o Hibernate com bancos como o BigTable, do Google App Engine, mas o pessoal que já fez isso admite que fica muito ruim de trabalhar e admite, também, que é melhor usar outras estratégias.

Então, recapitulando… JPA (Hibernate) != Bancos NoSQL, OK ?

[]´s!!!

Compreendo que o propósito do Hibernate não é remover o R da sua sigla existencial, mas acredito que ele poderia ser algumas vezes mais flexivel, eu tentei estudar um pouco da API do Hibernate pra implementar um dialeto pro CouchDB, e abandonei, não era vantagem.

Mas em se falando de representar estruturas com objetos, você pode perfeitamente usar a mesma abordagem do Hibernate, pois o NoSQL também possui relacionamentos, tanto quanto ou até mais que o relacional, só não é tão forçado.

Enfim, chegamos a uma conclusão de que Hibernate é uma melhor opção pra Relacional, mas não serve pra outros tipos de bancos não relacionais, e escrever um amontoado de SQL pra mim ta fora, prefiro muito mais usar o Hibernate e deixar esse retrabalho pra ele.

A

Rubem Azenha:
saoj:

Sim. Se vc não sabe nada, então é melhor partir para o Hibernate mesmo. O mercado aceita, etc. O problema é quem já sabia SQL, banco-de-dados, cache, blah, blah, e agora tem que esquecer isso e aprender um novo paradigma. O cara tem que se convencer que os benefícios superam os custos. Posso estar errado, mas não estou convencido disso. Pelo menos em todas as vezes que usei Hibernate.

Errado, na minha opinião. O hibernate não tem nenhum paradigma novo. Ele é um framework de persistencia/ORM. Se você programa decentemente a tua persistencia, você vai implementar na mão várias coisas que o Hibernate já tem implementado out-of-the-box.
Quem conhece bem Hibernate e depois le o PoEAA percebe que ele implementa vários patterns complexos, alguns inclusive que você dificilmente se daria o trabalho de implementar na mão (principalmente o Unit of Work). Cache da forma como ele faz nem se fala. Lazy loading, carregar automaticamente relacionamentos, etc, são outras coisas bem legais dele. Sem falar nos projetos Hibernate Search, Hibernate Validator, etc.

Tudo isso tem um custo, ele tem uma forma de se trabalhar e você precisa configurar ele. Mas hoje em dia a configuração dele é ridiculamente simples. O Hibernate em si é um projeto grande, tem uma complexidade, devido ao conjunto de conceitos e funcionalidades que ele implementa. Por isso é preciso ler a documentação e consultar a documentação constantemente.

Eu vejo muito desenvolvedor que não tem muita paciência e vai reinventando a roda, codificando tudo do zero. Eu acho que quem faz isso não é por que já sabe SQL e JDBC, e sim por que não tem conhecimento das ferramentas disponíveis. Por preguiça, má vontade, gosto pessoal e outros motivos, prefere não gastar tempo aprendendo bem uma ferramenta bem estabelecida que já faz muito bem o que ele precisa.

E não da pra comparar Hibernate com VB e Maker. Abstrair e implementar conceitos encapsulando suas complexidades é uma coisa, ferramenta visual para gerar código é outra.

Não vejo problema nenhum em não gostar de ferramentas/conceitos bem estabelecidos. Mas quando falamos de tecnologia e desenvolvimento, temos que que ter um olhar mais técnico e menos emocional. Se não gostamos de uma ferramenta que todo mundo gosta, nós podemos estar certos, mas seria bom entendermos o que realmente não gostamos na ferramenta e ter a mente aberta, pode ser que nós simplesmente não conhecemos a ferramenta o suficiente ou nunca trabalhamos num ambiente em que ela é usada de forma correta.

Falou tudo!

[]´s

A

Que polemica… :shock:

Já que é para abandonar o velho e usar o novo,só por que a maioria está usando :roll: ,então quem usa eclipse está ultrapassado,abandonem isso e comecem a utilizar Netbeans.

Desculpe,mas tem gente viajando… :roll:

M

Considerando que qualquer faculdade de quinta hoje em dia tem a linguagem java na sua grade curricular e o fato de ser considerado a linguagem oficial das consultorias 3 letrinhas que assolam o mercado de TI, acho uma tremenda ironia alguém afirmar ser “maluco contra-cultura” e ao mesmo tempo usar Java.

Só porque prefere usar um framework desconhecido? Sério?

A

Anime:
Que polemica… :shock:

Já que é para abandonar o velhor e usar o novo,só por que a maioria está usando :roll: ,então quem usa eclipse está ultrapassado,abandonem isso e comecem a utilizar Netbeans.

Desculpe,mas tem gente viajando… :roll:

Por esse ponto, os dois IDEs são velhos. O próprio Hibernate é bem velho também, assim como todo o resto exposto no tópico.

E é claro que não funciona assim. O ponto do Rubem é exatamente que não devemos levar no emocional decisões tecnológicas justamente porque a tecnologia não é emocional.

Isto sim é uma decisão racional:

http://community.jboss.org/wiki/Gradlewhy

Pra quem não irá ver o link, ele conta os motivos que levaram o time do Hibernate a deixar de usar o Maven e passar a usar o Gradle. São motivos parecidos que estão me levando a usar o Gradle na empresa, mas em casa o Maven me atende. É uma questão racional e não emocional.

A

Ataxexe:
Anime:
Que polemica… :shock:

Já que é para abandonar o velhor e usar o novo,só por que a maioria está usando :roll: ,então quem usa eclipse está ultrapassado,abandonem isso e comecem a utilizar Netbeans.

Desculpe,mas tem gente viajando… :roll:

Por esse ponto, os dois IDEs são velhos. O próprio Hibernate é bem velho também, assim como todo o resto exposto no tópico.

E é claro que não funciona assim. O ponto do Rubem é exatamente que não devemos levar no emocional decisões tecnológicas justamente porque a tecnologia não é emocional.

Isto sim é uma decisão racional:

http://community.jboss.org/wiki/Gradlewhy

Pra quem não irá ver o link, ele conta os motivos que levaram o time do Hibernate a deixar de usar o Maven e passar a usar o Gradle. São motivos parecidos que estão me levando a usar o Gradle na empresa, mas em casa o Maven me atende. É uma questão racional e não emocional.

Então não tinha entendido,mas cada caso é um caso e nem sempre “esse” será melhor que “aquele”,tecnologicamente falando… :wink:

aff acho que foi isso que ele quis dizer :oops:

A

Não, o saoj quis dizer que, se todo mundo usa, ele desconfia. O que não é de todo errado, a não ser que ele não use por não usar - ou seja, ele é um do contra, um “maluco da contra-cultura”.

[]´s

A

nussa… o Tópico ganhou proporções gigantescas…

Bom gente, acho que chegamos no meio termo onde todos tem um pouco de razão…

Lembro que quando lí sobre o Maven e tentei levar um Projeto com ele na mão, realmente deu vontade de chutar o balde e mandar pra PQP… Mas de fato consegui… O Maven nasceu como solução ao ANT, o Gradle (ao que parece, corrijam se eu estiver errado) como solução ao Maven… Daqui uns anos aparece um XBUILDULTRAMEGAPOWER como solução ao Gradle e etc…

Hibernate não resolve todos os Problemas da face da Terra, mas ajuda na manutenção, assim como o Spring (mas que é um parto é…)

Daqui um tempo estaremos falando de Rails, Groovy, Scala, etc…

O ponto é… meu Projeto precisa de Controle ou pode ter abstração ??

Isso só quem pode responder é cada um com seus Projetos… De repente o saoj nunca precisou de Abstração e sempre precisou de controle, alguns já se deram bem com os Frames porque seus projetos não precisavam de baixo tempo de resposta e nem de tanto controle manual, etc… E assim segue a vida e o mundo Tecnológico… Recentemente entrei em um Projeto onde toda a regra já estava implementada em Procedures… Mas já estava mesmo, sem acordo pra trocar… o bom e velho JDBC me ajudou pra KCTi…

Att.

Criado 8 de outubro de 2010
Ultima resposta 15 de out. de 2010
Respostas 58
Participantes 20