Paulo Silveira e Fabio Kung
Capitulo 2 do Livro do Hibernate
Alguns topicos que discutimos isso, e que lembro do SAOJ criticando isso:
http://www.guj.com.br/posts/list/50471.java
Paulo Silveira e Fabio Kung
Capitulo 2 do Livro do Hibernate
Alguns topicos que discutimos isso, e que lembro do SAOJ criticando isso:
http://www.guj.com.br/posts/list/50471.java
Antes iniciar qualquer novos posts.
Eu uso o Hibernate e gosto muito!
Comecei agora usar Ibatis , porque a nova empresa que eu trabalho esta adotando esse framework.
[quote=afsrj]Paulo Silveira e Fabio Kung
Capitulo 2 do Livro do Hibernate
Alguns topicos que discutimos isso, e que lembro do SAOJ criticando isso:
http://www.guj.com.br/posts/list/50471.java
[/quote]
Isso é só um exemplo, faz isso quem quer. O framework só inicia transações se você mandar ele fazer isso, se não mandar, ele não faz.
Garoto…garoto…
Curso de Etiqueta pra você: http://cursos.universia.net/app/es/showcourse.asp?cid=2422&langid=PT"]
você…Só mais uma perguntinha,melhor…
Vamos criar uma enquete?
Por que afsrj apóia o MentaBean?
Eu devo ser exceção porque essa hora não estou nem dormindo, nem tomando água de coco, nem na rede … eu posso ser exceção, mas tudo que você escreve é regra: vazio
Esquece quem eu sou, o que eu acho o que não acho, deixa de ser infantil e preconceituoso por UM POST por favor, engole o orgulho e diz porque VOCÊ(eu disse VOCÊ) defende ou não a respeito do MentaBean, como muitos aqui fizeram…
[quote=Maurício Linhares][quote=afsrj]Paulo Silveira e Fabio Kung
Capitulo 2 do Livro do Hibernate
Alguns topicos que discutimos isso, e que lembro do SAOJ criticando isso:
http://www.guj.com.br/posts/list/50471.java
[/quote]
Isso é só um exemplo, faz isso quem quer. O framework só inicia transações se você mandar ele fazer isso, se não mandar, ele não faz.[/quote]
Eu sei…
eu uso o hibernate e nao faco assim…
So respondi o que eu postei acima.
Lembro que talvez tenha sido dessa e de outras que o SAOJ nao gostou do hibernate.
A exemplificação do que eu falei
[quote]
So respondi o que eu postei acima.
Lembro que talvez tenha sido dessa e de outras que o SAOJ nao gostou do hibernate.[/quote]
Talvez? Talvez sobre algo que outra pessoa acha e nem se pronunciou a respeito, é quase “falsidade ideológica”…hehe
Valeu pela referência! Logo que eu postei o fmeyer me passou no messenger.
Mas, como o Maurício disse, isso não é culpa da ferramenta, e sim de quem usa errado.
Queria dar os parabéns ao Sergio pela iniciativa , o trabalho é bem interessante, e assim como citado por ele está em processo de evolução…
Por outro lado gostaria de relatar minha decepção não só pela falta de incentivo a alternativas ao dito “correto” (tais atitudes apenas inibem as pessoas de tentar algo diferente…), como pela falta de respeito entre profissionais do mesmo segmento que deveriam cooperar pelo crescimento mútuo( não só técnicamente, mas principalmente como homens )…
[]s
[quote=afsrj][quote=Maurício Linhares][quote=afsrj]Paulo Silveira e Fabio Kung
Capitulo 2 do Livro do Hibernate
Alguns topicos que discutimos isso, e que lembro do SAOJ criticando isso:
http://www.guj.com.br/posts/list/50471.java
[/quote]
Isso é só um exemplo, faz isso quem quer. O framework só inicia transações se você mandar ele fazer isso, se não mandar, ele não faz.[/quote]
Eu sei…
eu uso o hibernate e nao faco assim…
So respondi o que eu postei acima.
Lembro que talvez tenha sido dessa e de outras que o SAOJ nao gostou do hibernate.[/quote]
Nova enquete:
Qual a afirmação mais correta?
Fala ae saoj,
Só li o início do tópico e agora to um pouco com sono, mas com certeza vou terminar de ler depois.
Se você esta fazendo esse framework em busca de conhecimento, parabéns com certeza ele deve estar servindo para o seu fim!
Se você esta fazendo esse framework em busca de um ideal, parabéns é difícil buscar um ideal com tantas pessoas torcendo contra. Mais uma vez parabéns por seguir um ideal!
A respeito a testes, a meu ver tenho que te parabenizar pelo menos umas 1000 vezes!
Sou a favor de testes para tudo. Mas continuo achando muito importante o papel que você exerceu ou está exercendo aqui neste tópico.
Você ser contra enquanto todo mundo é a favor me faz questionar se você tem alguma razão. Na verdade não só eu, acho que um monte de gente deve ter se questionado e isto nos mostra como você cumpriu bem o seu papel.
Hoje quando eu refatoro e acabo estragando algumas outras coisas, dou graças a Deus por ter testes. E acabo tendo o pensamento que você levantou, não fui bom o suficiente para não estragar as outras coisas. Acho que sempre vai ser assim pois somos humanos e estamos sempre errando, por isso temos que contar com a ajuda dos testes para nos salvar.
Porém como em alguns lugares Orientação a objetos, refatoração e etc são desnecessários, deve ter algum lugar que testes também são desnecessários.
Ainda continuo achando que você tem alguma razão!
Boa sorte nos seus desafios!
Até onde eu sei não. O Sérgio não gosta do Hibernate porque ele gosta de fazer as coisas com JDBC direto, como ele já havia dito a muito tempo atrás quando levantou tópicos sobre o Hibernate ser fácil ou não de aprender. Realmente, aprender a usar o Hibernate não é trivial, ele olhou, fez um olá mundo e não se agradou, ponto.
O tamanho do buraco que é escrever um framework de ORM é muito fundo, persistência por alcançabilidade, lazy-loads, travas otimistas e isso não é simples. Se fosse simples, haveriam milhões frameworks de ORM por aí, assim como existem milhões de frameworks web.
Concordo, e na minha definicao, crescimento mutuo nao involve reinventar e promover uma versao simploria e nao-testada do Hibernate. :?
Se vc quiser anunciar um projeto novo pra um forum do tamanho do GUJ, onde vc provavelmente vai causar um numero significativo de pessoas a perder pelo menos alguns minutos lendo e entendendo a sua ideia, talvez seja uma boa ponderar um pouco se vale a pena - ou se vai ser so um puta desperdicio de tempo coletivo.
Nao sei voces, mas pelo menos uma coisa eu confirmei depois desse topico: se algum projeto em que eu for trabalhar tiver um JAR do Mentawai no classpath, ta na hora de treinar bem os atalhos de refactoring e structural search-n-replace do IntelliJ e trocar pra algum framework cujos desenvolvedores se importam em demonstrar a qualidade das ideias e do produto concretizado a partir delas.
Tem varios frameworks desses por ai, e nao vale a pena correr o risco de ficar travado usando Mentawai, que nao te da uma garantia minima de qualidade ou proposito.
Ser contra alguma coisa que uma industria inteira concorda ser uma boa pratica eh normalmente um sinal de que vc perdeu o bom-senso, ou nao esta considerando algum ponto - especialmente quando vc comeca a achar que a sua experiencia vale mais que a de outros (que talvez ja andaram pelos mesmos caminhos e tiveram as mesmas duvidas, mas mais que isso, tiveram o julgamento e humildade pra entender que estavam errados).
Sei que é difícil, mas tenta baixar um pouco a bolinha CV… Não chame mais a empresa onde os outros trabalham de puteiro, ok? (Sim eu falar que o comentário do fmeyer foi patético não lhe dá o direito de fazer isso, e não tende blefar pois eu falei que sua casa era um puteiro depois que vc chamou o meu trabalho de puteiro. Inclusive peços desculpas a vc por isso, pois tenho certeza que não é o caso do seu domícilio…)
O que vc fala tem muito pouca credibilidade, pois as pessoas estão vendo que vc está criticando apenas pelo prazer de criticar. Seus argumentos são como vc, pouco confiáveis e carregados de “segundas-intenções”.
Um companheiro seu aí da ThoughtWork fez um framework bem parecido com o Mentawai usando configuração programática, olha só: http://waffle.sourceforge.net/registrar.html
Por algum motivo os pacotes dele possuem as palavras ThoughtWork.
O Mentawai é um grande sucesso no Brasil e no exterior. Pessoas com muita mais credibilidade e insenção que o CV falam bem, usam e estão satisfetias.
Algumas pessoa entendem e aceitam que resultados concretos falam muito mais alto que o papo-furado de críticos mal-intencionados. Recebemos vários emails e mensagens de apoio todos os dias e publicamos algumas aqui: http://forum.mentaframework.org/posts/list/157.page
O problema é que o sucesso alheio dos outros incomoda alguns. Não deveria ser assim. Quando vejo alguém que conseguiu alguma coisa (profissionalmente, pessoalmente, espiritualmente, em relação a família, etc) não fico menosprezando essa pessoa para eu me sentir melhor, coisa que o CV e muitos fazem aqui. Eu procuro usá-la como insentivo para que eu almeje e trabalhe por coisas maiores.
Testes não é pecado. Se a sua aplicação possui testes, melhor pra vc e pra ela. Se o Rubem arranjar tempo para fazer os testes do Mentawai, mal não vai fazer para o projeto. Apenas eu quiz dizer que disciplina, organização, orientação a contratos, boas práticas de OO, faz com que vc possa EVOLUIR um sistema sem quebrá-lo. Um contrato pode ser preservado enquanto vc cria outros 1000 em cima dele, ou seja, se vc tem um contrato funcionando, sem bugs e vc cria outro, nada garante que esse novo que vc criou vai funcionar MAS O QUE JÁ EXISTIA TEM QUE FICAR INTACTO.
Exercito isso todos os dias no meu trabalho, onde um simples bug pode custar milhões e quebrar uma coisa que já estava funcionando é totalmente inaceitável.
Mais um exemplo: As vezes nos deparamos com um bug ou problema em um código que nem foi feito por nós. Isso aconteceu nesse tópico aqui: http://forum.mentaframework.org/posts/list/1085.page
O problema tinha haver que em determinados web containers, o listener por algum motivo não era carregado, enquanto em outros funcionava sem problemas. (Qual o teste que vai detectar esse problema eu não sei…)
Tínhamos duas opções:
Refazer toda a parte problemática, mudando o approach do listener para algo diferente e correr um risco gigantesco de criar muitos outros bugs de regressão (alguns dirão que se houvesse testes isso não aconteceria, de novo tenho minhas dúvidas…)
Manter os contratos e o código já existente e fazer uma alteração conservativa e seguro, seguindo a premissa máxima: “Não criarás novos bug no sistema!”
Um dos desenvolvedores do Mentawai queria partir para a opção 1), tendo inclusive já refeito boa parte do código. Depois de uma boa conversa com ele decidimos pela opção 2) e o problema foi solucionado colocando as seguintes linhas de código logo antes da primeira utilização da variável que estava dando o problema:
if (InputMoneyListener.LIST_PATH_FILES == null) {
InputMoneyListener iml = new InputMoneyListener();
iml.contextInitialized();
}
Termino esse post com a seguinte citação do livro “Know your limits, then forget them” de John Mason, que serviu de incentivo para mim e tenho certeza que servirá para muitos outros aqui dessa comunidade:
TODO framework tem configuracao prorgramatica. TODO. Nos mostramos isso pra voce com o Hibernate, mostraram no Struts Validator, etc. No Waffle é que nem no pico container: ele faz so o basico, a parte que encapsula a configuracao ainda ser feita em outro lugar, que é o nanocontainer!!! TODO core de framework deve ser possivel ser configurado programaticamente!!!
Nao da nem pra entender o que voce ta insinuando. Que o cara copiou o mentawai? (repare que as logicas do waffle NAO em ServletRequest sendo acessado, nem tem de estender uma outra classe). Que a ideia de configuracao programatica foi voce quem teve?
Sergio, voce é um bom programador, mas nao é porque voce usou alguma coisa que as outras pessoas estao te copiando. Pelo contrario, no caso do hibernate nao parece que é voce que gostou tanto que esta copiando? Até a configuracao programatica voce esta copiando!!!
Calma, Paulo.
Configuração programática é uma idéia que enfrenta resistencia de muitos. Me diga onde está o exemplo do VRaptor com configuração programática. Me diga onde está o exemplo do Hibernate com configuração programática. Me diga onde está o exemplo do Struts2 de validação com configuração programática. A proposta do Mentawai, que enfrentou milhões de pedradas, é fazer TUDO com configuração programática e NADA (ou o mínimo possível) com XML e Annotations. Isso em 2005. Alguns vão gostar e outros não. Assim é a vida. Prefiro focar nos que aprovam. Para os que querem se aprofundar mais nessa questão, fizemos um comparativo entre Mentawai e Struts2. Pegamos todos os exemplos do Struts2 DA DOCUMENTAÇÃO OFICIAL DELE. Vejam o resultado aqui e se houver algum erro, por favor opinem: http://forum.mentaframework.org/posts/list/1112.page
Essas coisas “existem” mas não são incentivadas, documentadas ou comentadas pelos seus autores, logo quase que “inexistem” pois ninguém usa ou fala delas.
Não falei que o Waffle copiou nada. Onde vc viu isso? Acho que vc INTERPRETOU ISSO A SUA MANEIRA.
O que eu quiz dizer é: “O Registar do Waffle é bem parecido com o ApplicationManager do Mentawai. O resto é diferente, ótimo, mas o approach a configuração é o mesmo, ou seja, configuração programática.”
Quanto ao MentaBeans agradeço os seus argumentos que foram totalmente válidos e corretos. Lembro aos senhores que o sistema está em beta, ou seja, seu futuro é totalmente incerto e está em caráter de experimentação no momento. Se me equivoquei com o MentaBeans, me perdoem. Continuarei tentando acertar…
Quanto ao Hibernate, o MentaBeans está mais para iBatis. O Hibernate mapeia Objetos em Tabelas e o iBatis e o MentaBeans mapeiam Objetos em QUERIES SQL.
Pronto, chegamos ao ponto do caso, o Sérgio não considera configuração usando Annotations como configuração programática. Partindo disso, realmente, o VRaptor e o Hibernate não tem o seu conceito de configuração programática, porque é melhor eu ir lá e fazer isso:
bean(hello.User.class, "Users")
.field("id", DBTypes.AUTOINCREMENT, true)
.field("name", DBTypes.STRING)
.field("age", DBTypes.INTEGER);
Do que usar uma simples annotation que já receba o nome e o tipo default da coluna sem que eu tenha que configurar nada.
Ou não é?
Saoj, mas nem a idéia de testes automatizados lhe parece razoável?
Pronto, chegamos ao ponto do caso, o Sérgio não considera configuração usando Annotations como configuração programática. Partindo disso, realmente, o VRaptor e o Hibernate não tem o seu conceito de configuração programática, porque é melhor eu ir lá e fazer isso:
bean(hello.User.class, "Users")
.field("id", DBTypes.AUTOINCREMENT, true)
.field("name", DBTypes.STRING)
.field("age", DBTypes.INTEGER);
Do que usar uma simples annotation que já receba o nome e o tipo default da coluna sem que eu tenha que configurar nada.
Ou não é?[/quote]
Exatamente! Parabéns por ter resumido com perfeição.
Se isso é o certo, se isso é o errado, é outra questão. Eu diria que é uma questão de gosto pessoal. Ambas estão certas, com alguns preferindo uma e outros preferindo a outra.
Dá uma olhada na validação via Annotations do Struts2: (documentação oficial do Struts2: http://struts.apache.org/2.x/docs/validation-annotation.html)
@Validation()
public class SimpleAnnotationAction extends ActionSupport {
@RequiredFieldValidator(type = ValidatorType.FIELD, message = "You must enter a value for bar.")
@IntRangeFieldValidator(type = ValidatorType.FIELD, min = "6",
max = "10", message = "bar must be between ${min} and ${max}, current value is ${bar}.")
public void setBar(int bar) {
this.bar = bar;
}
public int getBar() {
return bar;
}
@Validations(
requiredFields =
{@RequiredFieldValidator(type = ValidatorType.SIMPLE,
fieldName = "customfield", message = "You must enter a value for field.")},
requiredStrings =
{@RequiredStringValidator(type = ValidatorType.SIMPLE,
fieldName = "stringisrequired", message = "You must enter a value for string.")},
emails =
{ @EmailValidator(type = ValidatorType.SIMPLE,
fieldName = "emailaddress", message = "You must enter a value for email.")},
urls =
{ @UrlValidator(type = ValidatorType.SIMPLE,
fieldName = "hreflocation", message = "You must enter a value for email.")},
stringLengthFields =
{@StringLengthFieldValidator(type = ValidatorType.SIMPLE, trim = true, minLength="10" ,
maxLength = "12", fieldName = "needstringlength", message = "You must enter a stringlength.")},
intRangeFields =
{ @IntRangeFieldValidator(type = ValidatorType.SIMPLE,
fieldName = "intfield", min = "6", max = "10", message = "bar must be between ${min} and ${max}, current value is ${bar}.")},
dateRangeFields =
{@DateRangeFieldValidator(type = ValidatorType.SIMPLE,
fieldName = "datefield", min = "-1", max = "99", message = "bar must be between ${min} and ${max}, current value is ${bar}.")},
expressions = {
@ExpressionValidator(expression = "foo > 1",
message = "Foo must be greater than Bar 1. Foo = ${foo}, Bar = ${bar}."),
@ExpressionValidator(expression = "foo > 2",
message = "Foo must be greater than Bar 2. Foo = ${foo}, Bar = ${bar}."),
@ExpressionValidator(expression = "foo > 3",
message = "Foo must be greater than Bar 3. Foo = ${foo}, Bar = ${bar}."),
@ExpressionValidator(expression = "foo > 4",
message = "Foo must be greater than Bar 4. Foo = ${foo}, Bar = ${bar}."),
@ExpressionValidator(expression = "foo > 5",
message = "Foo must be greater than Bar 5. Foo = ${foo}, Bar = ${bar}.")
}
)
public String execute() throws Exception {
return SUCCESS;
}
}
Claro, que mal isso pode fazer a um projeto? Nenhum! Só não acho que seja o fundamental, essencial, o mais importante, que a qualidade e/ou destino de um projeto/sistema/aplicação está intimamente ligado a isso. Como vc pode ver aqui, o CV e o fmeyer falaram categoricamente que se não tem testes é um lixo, é inútil.