Dá para utilizar Ruby a la MVC, sem templates por exemplo.
Existe algo parecido com custom tags em Ruby, para facilitar e limpar a camada view ?
Dá para utilizar Ruby a la MVC, sem templates por exemplo.
Existe algo parecido com custom tags em Ruby, para facilitar e limpar a camada view ?
Sim, o Rails (que é um framework MVC para o Ruby) têm os Helpers, que funcionam como taglibs. Cada controller gerado têm o seu próprio helper, e existe o appliction_helper.rb que é global e é só editar e ainda tem as bibliotecas de helpers (ActiveView, ActiveRecord e por ai vai).
Por exemplo, para mostrar um input de seleção de datas fazemos assim:
pronto… ou se quiser melhorar…
E você tem a escolha só do mes/ano.
Agora vamos fazer o novo proprio?
def hello_tag(name)
"Hello #{name}!"
end
no RHTML coloque:
E voce terá um Hello Saoj!
Essa eh a melhor parte.
IMHO, do jeito que esta hoje, as tags sao uma das piores partes do desenvolvimento Web com Java. Fazer a taglib ate que nao eh complicado (mas tem suas bizarrices), porem a burocracia envolvida em disponibiliza-la para a aplicacao eh triste. As ultimas especificacoes de Servlets/JSP tem melhorado isso, mas esta longe do ideal. Por causa disso ja existia gente pensando em usar Java+PHP ha anos atras, antes das ondas “RoR” e “JVM com linguagens nao-Java”.
Marcio Kuchma
Essa eh a melhor parte.
IMHO, do jeito que esta hoje, as tags sao uma das piores partes do desenvolvimento Web com Java. Fazer a taglib ate que nao eh complicado (mas tem suas bizarrices), porem a burocracia envolvida em disponibiliza-la para a aplicacao eh triste. As ultimas especificacoes de Servlets/JSP tem melhorado isso, mas esta longe do ideal. Por causa disso ja existia gente pensando em usar Java+PHP ha anos atras, antes das ondas “RoR” e “JVM com linguagens nao-Java”.
Marcio Kuchma[/quote]
Bom eu uso bastante JSTL e funciona bem. Claro que pra um escopo definido, criar suas tags é outra coisa totalmente diferente.
Há quem goste de ustilizar o Velocity exatamente por isso e definir suas macros.
Tambem uso. Nao vou negar que funciona.
Mas a ideia inicial que era isolar codigo de forma que autores de paginas pudessem utiliza-lo sem conhecer Java, nao foi pra frente. Eu pelo menos nao vi ainda um ambiente em que desenvolvedores implementassem tags e autores de paginas apenas as utilizassem (isso me lembra os zilhoes de “roles” que os livros de J2EE falam na introducao).
Normalmente utilizamos tags para a camada view - mas, pera, eu sou o programador Java. Em suma, tiveram uma boa intencao, mas as tags sao a solucao certa para o problema errado, na minha opiniao.
Exato. O problema eh que o Velocity e outros fw de templates nao sao especificados pelo JCP. Ai ja viu… :roll:
Marcio Kuchma
isto não é praticamente oficializar o Scriptlet que tanto odiamos?
Na minha interpretacao nao, pois o codigo dos helpers fica isolado, no caso do Rails. Esse eh o problema do scriptlet - espalhar codigo nao-pertinente na camada visual. Isolando isso, resolve-se o problema. Mesmo nos velhos tempos de PHP, qualquer programador nao-newbie ja sabia como resolver isso, criando arquivos de funcoes utilitarias isoladas.
Marcio Kuchma
Pessoal, na prática isso é uma porcaria
Dá pra vc fazer em java também, você usaria algo assim?
public class Taglib {
public static String hello(String name) {
return "Hello "+name;
}
}
e no JSP
<html>
<body>
<%= Taglib.hello("Rubem"); %>
</body>
</html>
Fala verdade… Assim como nós devemos desligar o “Java is Cool”, vamos desligar o “Ruby\Rails is Cool” também
Não vi nada d+ nesse esquema de tags do RoR. E outra coisa não é tag coisa nenhuma… porque tag ( <…/> ) não é scriptlet ( <% …%> ).
[quote=microfilo]Pessoal, na prática isso é uma porcaria
Dá pra vc fazer em java também, você usaria algo assim?
public class Taglib {
public static String hello(String name) {
return "Hello "+name;
}
}
e no JSP
[code]
<html>
<body>
<%= Taglib.hello(“Rubem”); %>
</body>
</html>
[/code][/quote]
Usaria, com certeza. Nao eh isso que as taglibs fazem, servir de helper pra view nao ter que ficar manipulando objetos de negocio meio sacais de navegar, ou gerar pedacos de XHTML repetitivos?
Nao vejo pq um metodo estatico e uma chamada nao resolvem.
Qual a diferenca do exemplo que voce deu em relacao a:
<html>
<body>
<taglib:hello name="Rubem"/>
</body>
</html>
Concordo contigo. Proponho argumentacao com fatos. Em que usar uma tag ao inves de codigo faz com que a situacao fique menos “porcaria”?
BTW, os helpers do Rails sao muito bons e ninguem sente falta de tags. Por que sera? E olha que o nicho do Rails eh desenvolvimento pra Web. Nao estou dizendo que “Rails eh cool” e Java nao presta por causa disso. Java tem suas opcoes, como o Click e o ECS. Em outro nivel, tem Velocity e Freemarker. Groovy pode ser uma opcao para desenvolver as telas.
Na verdade a questao eh mais sobre “programar parte visual com tags” versus “programar parte visual com Java”, e nao simplesmente Ruby vs Java, como parece ser o modo que varias pessoas encaram esse tipo de discussao.
Marcio Kuchma
Exato, nao tem nada demais, e pq deveria ter? Eh soh um jeito de tirar alguma logica de apresentacao mais complexa de dentro dos RHTMLs, oras!
Entupir scriptlets com codigo eh sempre uma ideia ruim, mas se vc se restringir a chamar um metodo de um helper, que eh facil de testar separadamente e garantir que funciona bonitinho, qual o problema?
[quote=cv]
Usaria, com certeza. Nao eh isso que as taglibs fazem, servir de helper pra view nao ter que ficar manipulando objetos de negocio meio sacais de navegar, ou gerar pedacos de XHTML repetitivos?
Nao vejo pq um metodo estatico e uma chamada nao resolvem.[/quote]
Taglibs são mais apropriadas do que Helpers estáticos. Com elas você em zero de código Java na view, são bem mais fáceis do designer entender, ela tem acesso aos contextos (não sei se este helper do rails faz isso…), ferramentas se dão melhor com ela, a página fica bem mais limpa.
Costumo trabalhar com um grande conjunto de taglibs que agilizam muito o desenvolvimento das telas. Seria péssimo ter que ficar utilizando esses helpers, a página ia ficar muito poluida com código Java no meio…
Isso sem contar os ajax helpers nativos…
<%= link_to_remote "Remove",
:url=>{
:controller=>"animals",
:action=>"destroy",
:id=>animal.id},
:update=>"animal#{animal.id}",
:loading=>"status('animal#{animal.id}')"
%>
http://wiki.rubyonrails.org/rails/pages/How+to+use+the+Ajax+helpers
Não sei em qual realidade vocês trabalham, mas ao menos aqui no sul, a GRANDE maioria das empresas de TI, telinhas e etc, quem faz é os próprios desenvolvedores, e designer só aparece na brincadeira(quando aparece), para estabelecer um padrão de layout e os desenvolvedores seguirem. Então, acho que essa do “designer entender” não é muito válida.
A questão não é somente pela extrema facilidade de entendimento de código pelos designers, mas também por estabelecer limites de construção de códigos em JSP, a construção de tags melhora a componentização e facilita a programação de novas telas.
Com scriptlet (mesmo com uma chamada a um helper) possibilita maiores margens de erros na programação. E é uma porcaria trabalhar com eles quando se tem uma comunicação com diversos parâmetros.
Preferencialmente uso tags, E.L. mas scriptlet saio correndo.
Agora enfim, se esse é o mecanismo que o RoR provê para criação de tags, meus pêsames, mas os recursos de custom tags, EL, tagfiles, JSTL são bem melhores.
Cite algo que você pode fazer com EL/JSTL/taglibs que não pode ser feito usando os helpers?
Cite algo que você pode fazer com EL/JSTL/taglibs que não pode ser feito usando os helpers?[/quote]
Não estou dizendo que não dá pra ser feito. Estou dizendo que é horrivelmente bizarro. Mas hoje o que queremos é rapidez no desenvolvimento, componentização, e facilidade de manutenção.
Fabrício, continuo não entendendo teu ponto. Você esta querendo me dizer que ter uma outra linguagem (sim, porque JSTL,EL,Velocity, Freemaker,etc são outras linguages), é mais fácil de manter, do que ter na sua view pedacinhos de código numa linguagem que você já conhece - e utiliza em todos os outros pontos da sua aplicação?
Enfim, existe um esquema de tags <tag>…</tag> no RoR ou só existe esse uso melado de scriptlet ( <% horrível %> )?