SlideShare a Scribd company logo
1 of 53
43ª Reunião Presencial - 23/11/2013

http://netponto.org

The power of templating…
... with NVelocity
Nuno Cancelo
Patrocinador “GOLD”

Twitter: @PTMicrosoft
@PTMicrosoft
http://www.microsoft.com/portugal
Patrocinadores “Silver”
Patrocinadores “Bronze”
Próximas reuniões presenciais
23/11/2013 – Novembro (Lisboa)
30/11/2013 – Novembro (Porto)
14/12/2013 – Dezembro (Lisboa)
18/01/2014 – Janeiro (Lisboa)

Reserva estes dias na agenda! :)
Licença
Attribution 3.0 Unported
You are free:
• to Share - to copy, distribute and transmit the work
• to Remix - to adapt the work to make commercial use of the work

Under the following conditions:
Attribution — You must attribute the work in the manner specified by
the author or licensor (but not in any way that suggests that they
endorse you or your use of the work)
Source: http://creativecommons.org/licenses/by/3.0/
Nuno Cancelo
Computer Science Engineer

• Licenciado em Eng. Informática e de Computadores (ISEL)

• Tirar o mestrado em Eng. Informática (ISCTE)
• Technical Consultant @ CGI
Agenda
• Why Templating
• NVelocity
• Sintaxe
–Referências
–Diretivas
–Pontas Soltas
Why Templating?
Template
– Utilizado desde o início dos tempos
– Em diversas áreas
– Em todas as empresas
– É a identificação de um padrão
Padrões de Desenho
• Separation of Concerns
– AOP
– HTML/CSS/Javascript

• MVC
– Model
– View
– Controller
Template Engine
Casos de Uso:
– Geração de páginas HTML
– Geração de emails
– Geração de código automático
– Geração de ficheiros em xml
– Complemento de outras ferramentas
NVelocity
“Why do people use Velocity and/or NVelocity?”

“Since the dawn of web apps, people started to
think about separation of concerns in many
applications, including web applications. The
challenge is to separate what is view code from
what is business code, or logic code. When jsps
first arrived, many people where coding lots of
logic in jsps directly (stuff like db access and
other), breaking the basic principle of separation
of concerns (jsps should be responsible for the
presentation, not for the logic).”

Source: http://stackoverflow.com/questions/503957/why-do-people-use-velocity-and-or-nvelocity
NVelocity
• Port do projeto Apache Jakarta Velocity
• Simples
– Aprender
– Usar
– Estender
• Projecto popular: “Castle Project” (MonoRail)
• Utilizado por uma grande empresa portuguesa
para gerar código automático
NVelocity
Prós
• Separação de Responsabilidades
• Linguagem fácil de aprender
• Sintaxe igual ao Velocity
• Utilizado para múltiplos propósitos
NVelocity
Contras
• Linguagem interpretada
• Documentação dispersa
• Comunidade pouco ativa
• Projetos ‘parados’
NVelocity
Instalação
• Nuget
– Castle Project (V1.0.3 e V.1.1.1)

• Castle Project
– http://sourceforge.net/projects/castleproject/files/NVelocity/
“Hello World”
NVelocity
Sintaxe
NVelocity – Síntaxe
Velocity Template Language (VTL)
• Conjunto de instruções limitado
– Comentários
– Referências
– Diretivas
NVelocity – Síntaxe
VTL - Comentários
Comentários
– De linha:
• Começam com ‘##’ e acabam no fim da linha

– Multilinha:
• Começam com ‘#*’ e terminam com ‘*#’

– VTL:
• Começam com ‘#**’ e terminam com ‘*#’
NVelocity – Síntaxe
VTL - Referências
Identificadores VTL
– Variáveis:
• $ [ ! ][ { ][ a-z, A-Z ][ a-z, A-Z, 0..9, -, _ ][ } ]

– Propriedades:
• $ [ { ][ a-z, A-Z ][ a-z, A-Z, 0.-9, -, _ ]* .[a-z, A-Z ][ a-z, A-Z, 0-9, -, _ ]* [ } ]

– Métodos:
• $[ { ][ a-z, A-Z ][ a-z, A-Z, 0.-9, -, _ ]* .[a-z, A-Z ][ a-z, A-Z, 0-9, -, _ ]*( [ optional
parameter list... ] ) [ } ]
NVelocity – Síntaxe
VTL - Referências
Exemplos de Identificadores VTL
– Variáveis:
• $evento

– Propriedades:
• $Evento.Sessao

– Métodos:
• $Evento.getAttendees()
NVelocity – Síntaxe
VTL - Referências
Identificadores VTL
– Notação Normal
• Utilização habitual. Ex: $evento

– Notação Formal
• Colocação de { }. Ex: ${evento}. ${evento}1 != $evento1

– Notação Silenciosa
• Colocação de ! . Ex: $!evento, $!{evento}
“VTL Demo”
NVelocity – Síntaxe
VTL - Diretivas
• Começam sempre por #
• Podem ter { }
• Acabam sempre por #end
– Excepto o #SET

• É case sensitive
– Todas as directivas são em minúsculas
– As referências também são case sensitive
NVelocity – Síntaxe
VTL - Diretivas
#SET
– Estabelece o valor do identificador VTL
– #set( $evento = “Netponto” )
– Suporta listas, arrays, contantes, literais e variáveis

Nota:
Admintindo que $evento = “Netponto”
“$envento” != ‘$evento’ => Netponto != $evento
NVelocity – Síntaxe
VTL - Diretivas
Expressões aritméticas:
Operação

Exemplo

Adição

#set( $value = $foo + 1 )

Subtração

#set( $value = $foo - 1 )

Multiplicação

#set( $value = $foo * 1 )

Divisão

#set( $value = $foo / 1 )

Resto

#set( $value = $foo % 1 )
NVelocity – Síntaxe
VTL – Diretivas – Controlo de Fluxo
#IF / #IF-#ELSE / #IF-#ELSEIF-#ELSE
#IF (Expressão Booleana)
[ #ELSEIF (Expressão Booleana) ]
[ #ELSE]
#END
NVelocity – Síntaxe
VTL – Diretivas – Controlo de Fluxo
Expressões Booleanas:
Operador

Simbolo

Alternativo

Equals Number

==

eq

#if( $foo == 42 )

Equals String

==

eq

#if( $foo == "bar" )

Object Equivalence

==

eq

#if( $foo == $bar )

Not Equals

!=

ne

#if( $foo != $bar )

Greater Than

>

gt

#if( $foo > 42 )

Less Than

<

lt

#if( $foo < 42 )

Greater Than or Equal To

>=

ge

#if( $foo >= 42 )

Less Than or Equal To

<=

le

#if( $foo <= 42 )

!

not

Boolean NOT

Exemplo

#if( !$foo )
NVelocity – Síntaxe
VTL – Diretivas - Loops
#FOREACH
#FOREACH (Lista)

#END
NVelocity – Síntaxe
VTL – Diretivas - Loops
Fancy Foreach loops:
Directiva

Significado

#EACH

Texto que aparece em cada item

#BEFORE

Texto que aparece antes de cada item

#AFTER

Texto que aparece depois de cada item

#BETWEEN

Texto que aparece entre de cada item

#ODD

Texto que aparece no item impar

#EVEN

Texto que aparece no item par

#NODATA

O conteudo é gerado caso seja nulo

#BEFOREALL

O que aparece antes de todos os items

#AFTERALL

O que aparece depoisde todos os items
NVelocity – Síntaxe
VTL - Diretivas
#INCLUDE
Importa um ou vários ficheiro(s) local(ais)
#include ( "one.txt" )

Não é feito o render do ficheiro
#PARSE
Importa um ficheiro local e faz render dele
#parse ( "one.vm" )
NVelocity – Síntaxe
VTL - Diretivas
#BREAK
– Pára a rendarização do scope corrente
#break

#STOP
– Pára o processamento do template
#break

– Útil para debugging
NVelocity – Síntaxe
VTL - Diretivas
#EVALUATE
Avaliar referências VTL
#evaluate($foo)
#DEFINE
Atribuir um bloco VTL a uma referência
#define( $block )Hello $who #end
#set( $who = 'World!' )
$block
Keep All Together
NVelocity
Pontas soltas
NVelocity – Síntaxe
VTL - Escaping
Porquê?
– VTL usa o $ e o #
• É necessário apresentar estes símbolos

Como?
– Com o caracter backslash: ‘’

Resultado?
– Comboio de caracteres para apresentar.
NVelocity – Síntaxe
VTL - Formatação
– As directivas são em minúsculas
– As referências são case sensitive
– Não é necessária identação
– Pode ser tudo numa única linha
NVelocity – Síntaxe
VTL - Ranges
• Não existe o #FOR
• Mas o #FOREACH é iterável
– [n..m]
– #foreach( $foo in [1..5] ) $foo #end (1 2 3 4 5)
– #foreach( $bar in [2..-2] ) $bar #end (2 1 0 -1 -2)
NVelocity – Síntaxe
VTL – Good to Know
• Numero da Iteração através $velocityCount
• Aceder a uma posição da coleção
– $collection.get_Item(index)
• $Events.get_Item(3)
• $Events.get_Item(3).EventName
• $Events.get_Item(3).EventLocalization
Conclusão
•
•
•
•

Simples de Aprender
Simples de Usar
É possivel ser um motor de views no ASP.NET MVC
Têm potencial para curiosos
– Geração de Código
– Emails
– Outros
Referências
VTL Reference Guide [visitado Novembro/2013]
– http://velocity.apache.org/engine/releases/velocity-1.5/vtl-reference-guide.html

Apache Developer Guide

[visitado Novembro/2013]

– http://velocity.apache.org/engine/devel/developer-guide.html

Apache User Guide

[visitado Novembro/2013]

– http://velocity.apache.org/engine/devel/user-guide.html

Castle Project Nvelocity [visitado Novembro/2013]
– http://docs.castleproject.org/MonoRail.NVelocity.ashx

NVelocity and Collections (and Possibly Arrays) [visitado Novembro/2013]
– http://thiglife.com/2008/06/04/nvelocity-and-collections-and-possibly-arrays/
Patrocinador “GOLD”

Twitter: @PTMicrosoft
@PTMicrosoft

http://www.microsoft.com/portugal
Patrocinadores “Silver”
Patrocinadores “Bronze”
Próximas reuniões presenciais
23/11/2013 – Novembro (Lisboa)
30/11/2013 – Novembro (Porto)
14/12/2013 – Dezembro (Lisboa)
18/01/2014 – Janeiro (Lisboa)

Reserva estes dias na agenda! :)
Obrigado!
Nuno Cancelo
nuno.cancelo@gmail.com

@masterzdran

www.facebook.com/nuno.cancelo
www.linkedin.com/in/nunocancelo
www.github.com/masterzdran
www.bitbucket.org/masterzdran
Source: Iconset: Social Media Icons by Iconshock (12 icons) : http://www.iconarchive.com/show/social-media-icons-by-iconshock.html

More Related Content

Similar to The power of templating.... with NVelocity - Nuno Cancelo

(ACH2055) Arquitetura de Computadores - Aula 10
(ACH2055) Arquitetura de Computadores - Aula 10(ACH2055) Arquitetura de Computadores - Aula 10
(ACH2055) Arquitetura de Computadores - Aula 10Norton Trevisan Roman
 
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSRubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSEmerson Macedo
 
12 aula - shell script-2015
12   aula - shell script-201512   aula - shell script-2015
12 aula - shell script-2015Flávia Santos
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Emerson Macedo
 
Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopAlexei Znamensky
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terEmerson Macedo
 
Secomp 2011 - Node.JS - Introdução
Secomp 2011 - Node.JS - IntroduçãoSecomp 2011 - Node.JS - Introdução
Secomp 2011 - Node.JS - IntroduçãoEmerson Macedo
 
Produtividade em Java com Grails
Produtividade em Java com GrailsProdutividade em Java com Grails
Produtividade em Java com GrailsWanderson Oliveira
 
O bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsO bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsNuno Paz
 
Além da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangAlém da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangElaine Naomi
 
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Dickson S. Guedes
 
PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)
PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)
PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)Charles Fortes
 
Desenvolvimento em .Net - Boas Praticas De Desenvolvimento
Desenvolvimento em .Net - Boas Praticas De DesenvolvimentoDesenvolvimento em .Net - Boas Praticas De Desenvolvimento
Desenvolvimento em .Net - Boas Praticas De DesenvolvimentoVitor Silva
 
GDG Conf Node JS sem segredos
GDG Conf Node JS sem segredosGDG Conf Node JS sem segredos
GDG Conf Node JS sem segredosCaio Cutrim
 
GDG NodeJS Sem Segredos
GDG NodeJS Sem SegredosGDG NodeJS Sem Segredos
GDG NodeJS Sem SegredosCaio Cutrim
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerGiovanni Kenji Shiroma
 

Similar to The power of templating.... with NVelocity - Nuno Cancelo (20)

(ACH2055) Arquitetura de Computadores - Aula 10
(ACH2055) Arquitetura de Computadores - Aula 10(ACH2055) Arquitetura de Computadores - Aula 10
(ACH2055) Arquitetura de Computadores - Aula 10
 
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSRubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
 
12 aula - shell script-2015
12   aula - shell script-201512   aula - shell script-2015
12 aula - shell script-2015
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
 
Minicurso Ruby on Rails
Minicurso Ruby on RailsMinicurso Ruby on Rails
Minicurso Ruby on Rails
 
Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl Workshop
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis ter
 
Secomp 2011 - Node.JS - Introdução
Secomp 2011 - Node.JS - IntroduçãoSecomp 2011 - Node.JS - Introdução
Secomp 2011 - Node.JS - Introdução
 
Produtividade em Java com Grails
Produtividade em Java com GrailsProdutividade em Java com Grails
Produtividade em Java com Grails
 
O bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsO bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.js
 
Orquestração com Mcollective
Orquestração com McollectiveOrquestração com Mcollective
Orquestração com Mcollective
 
Além da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangAlém da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e Erlang
 
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
 
PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)
PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)
PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)
 
ScalaCamp Meetup - Coleções em Scala
ScalaCamp Meetup - Coleções em ScalaScalaCamp Meetup - Coleções em Scala
ScalaCamp Meetup - Coleções em Scala
 
Desenvolvimento em .Net - Boas Praticas De Desenvolvimento
Desenvolvimento em .Net - Boas Praticas De DesenvolvimentoDesenvolvimento em .Net - Boas Praticas De Desenvolvimento
Desenvolvimento em .Net - Boas Praticas De Desenvolvimento
 
Agbd aula4 sql_ddl
Agbd aula4 sql_ddlAgbd aula4 sql_ddl
Agbd aula4 sql_ddl
 
GDG Conf Node JS sem segredos
GDG Conf Node JS sem segredosGDG Conf Node JS sem segredos
GDG Conf Node JS sem segredos
 
GDG NodeJS Sem Segredos
GDG NodeJS Sem SegredosGDG NodeJS Sem Segredos
GDG NodeJS Sem Segredos
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
 

More from Comunidade NetPonto

Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...Comunidade NetPonto
 
De Zero a Produção - João Jesus
De Zero a Produção - João JesusDe Zero a Produção - João Jesus
De Zero a Produção - João JesusComunidade NetPonto
 
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComo deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComunidade NetPonto
 
Case studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsCase studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsComunidade NetPonto
 
Aspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpAspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpComunidade NetPonto
 
Utilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes UnitáriosUtilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes UnitáriosComunidade NetPonto
 
Dinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de ProjectoDinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de ProjectoComunidade NetPonto
 
KnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realKnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realComunidade NetPonto
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComunidade NetPonto
 
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto ProieteWindows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto ProieteComunidade NetPonto
 
Uma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIUma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIComunidade NetPonto
 
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8Comunidade NetPonto
 
Sessão Especial: PowerPivot com Alberto Ferrari
Sessão Especial: PowerPivot com Alberto FerrariSessão Especial: PowerPivot com Alberto Ferrari
Sessão Especial: PowerPivot com Alberto FerrariComunidade NetPonto
 
Arquitectura dos Serviços da plataforma Windows Azure
Arquitectura dos Serviços da plataforma Windows AzureArquitectura dos Serviços da plataforma Windows Azure
Arquitectura dos Serviços da plataforma Windows AzureComunidade NetPonto
 
VSTO + LOB Apps Information Matters
VSTO + LOB Apps Information MattersVSTO + LOB Apps Information Matters
VSTO + LOB Apps Information MattersComunidade NetPonto
 

More from Comunidade NetPonto (20)

Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
 
HTML5 - Pedro Rosa
HTML5 - Pedro RosaHTML5 - Pedro Rosa
HTML5 - Pedro Rosa
 
De Zero a Produção - João Jesus
De Zero a Produção - João JesusDe Zero a Produção - João Jesus
De Zero a Produção - João Jesus
 
OData – Super Cola W3
OData – Super Cola W3OData – Super Cola W3
OData – Super Cola W3
 
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComo deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
 
Case studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsCase studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store Apps
 
Aspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpAspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharp
 
Utilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes UnitáriosUtilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes Unitários
 
Dinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de ProjectoDinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de Projecto
 
KnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realKnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida real
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noite
 
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto ProieteWindows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
 
Uma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIUma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web API
 
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
 
Sessão Especial: PowerPivot com Alberto Ferrari
Sessão Especial: PowerPivot com Alberto FerrariSessão Especial: PowerPivot com Alberto Ferrari
Sessão Especial: PowerPivot com Alberto Ferrari
 
NuGet no Contexto Empresarial
NuGet no Contexto EmpresarialNuGet no Contexto Empresarial
NuGet no Contexto Empresarial
 
Arquitectura dos Serviços da plataforma Windows Azure
Arquitectura dos Serviços da plataforma Windows AzureArquitectura dos Serviços da plataforma Windows Azure
Arquitectura dos Serviços da plataforma Windows Azure
 
Developer 0.0 - Tiago Pascoal
Developer 0.0 - Tiago PascoalDeveloper 0.0 - Tiago Pascoal
Developer 0.0 - Tiago Pascoal
 
Kentico CMS 6
Kentico CMS 6Kentico CMS 6
Kentico CMS 6
 
VSTO + LOB Apps Information Matters
VSTO + LOB Apps Information MattersVSTO + LOB Apps Information Matters
VSTO + LOB Apps Information Matters
 

The power of templating.... with NVelocity - Nuno Cancelo

  • 1. 43ª Reunião Presencial - 23/11/2013 http://netponto.org The power of templating… ... with NVelocity Nuno Cancelo
  • 5. Próximas reuniões presenciais 23/11/2013 – Novembro (Lisboa) 30/11/2013 – Novembro (Porto) 14/12/2013 – Dezembro (Lisboa) 18/01/2014 – Janeiro (Lisboa) Reserva estes dias na agenda! :)
  • 6. Licença Attribution 3.0 Unported You are free: • to Share - to copy, distribute and transmit the work • to Remix - to adapt the work to make commercial use of the work Under the following conditions: Attribution — You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work) Source: http://creativecommons.org/licenses/by/3.0/
  • 7. Nuno Cancelo Computer Science Engineer • Licenciado em Eng. Informática e de Computadores (ISEL) • Tirar o mestrado em Eng. Informática (ISCTE) • Technical Consultant @ CGI
  • 8. Agenda • Why Templating • NVelocity • Sintaxe –Referências –Diretivas –Pontas Soltas
  • 10. Template – Utilizado desde o início dos tempos – Em diversas áreas – Em todas as empresas – É a identificação de um padrão
  • 11. Padrões de Desenho • Separation of Concerns – AOP – HTML/CSS/Javascript • MVC – Model – View – Controller
  • 12. Template Engine Casos de Uso: – Geração de páginas HTML – Geração de emails – Geração de código automático – Geração de ficheiros em xml – Complemento de outras ferramentas
  • 14. “Why do people use Velocity and/or NVelocity?” “Since the dawn of web apps, people started to think about separation of concerns in many applications, including web applications. The challenge is to separate what is view code from what is business code, or logic code. When jsps first arrived, many people where coding lots of logic in jsps directly (stuff like db access and other), breaking the basic principle of separation of concerns (jsps should be responsible for the presentation, not for the logic).” Source: http://stackoverflow.com/questions/503957/why-do-people-use-velocity-and-or-nvelocity
  • 15. NVelocity • Port do projeto Apache Jakarta Velocity • Simples – Aprender – Usar – Estender • Projecto popular: “Castle Project” (MonoRail) • Utilizado por uma grande empresa portuguesa para gerar código automático
  • 16. NVelocity Prós • Separação de Responsabilidades • Linguagem fácil de aprender • Sintaxe igual ao Velocity • Utilizado para múltiplos propósitos
  • 17. NVelocity Contras • Linguagem interpretada • Documentação dispersa • Comunidade pouco ativa • Projetos ‘parados’
  • 18. NVelocity Instalação • Nuget – Castle Project (V1.0.3 e V.1.1.1) • Castle Project – http://sourceforge.net/projects/castleproject/files/NVelocity/
  • 20.
  • 22. NVelocity – Síntaxe Velocity Template Language (VTL) • Conjunto de instruções limitado – Comentários – Referências – Diretivas
  • 23. NVelocity – Síntaxe VTL - Comentários Comentários – De linha: • Começam com ‘##’ e acabam no fim da linha – Multilinha: • Começam com ‘#*’ e terminam com ‘*#’ – VTL: • Começam com ‘#**’ e terminam com ‘*#’
  • 24. NVelocity – Síntaxe VTL - Referências Identificadores VTL – Variáveis: • $ [ ! ][ { ][ a-z, A-Z ][ a-z, A-Z, 0..9, -, _ ][ } ] – Propriedades: • $ [ { ][ a-z, A-Z ][ a-z, A-Z, 0.-9, -, _ ]* .[a-z, A-Z ][ a-z, A-Z, 0-9, -, _ ]* [ } ] – Métodos: • $[ { ][ a-z, A-Z ][ a-z, A-Z, 0.-9, -, _ ]* .[a-z, A-Z ][ a-z, A-Z, 0-9, -, _ ]*( [ optional parameter list... ] ) [ } ]
  • 25. NVelocity – Síntaxe VTL - Referências Exemplos de Identificadores VTL – Variáveis: • $evento – Propriedades: • $Evento.Sessao – Métodos: • $Evento.getAttendees()
  • 26. NVelocity – Síntaxe VTL - Referências Identificadores VTL – Notação Normal • Utilização habitual. Ex: $evento – Notação Formal • Colocação de { }. Ex: ${evento}. ${evento}1 != $evento1 – Notação Silenciosa • Colocação de ! . Ex: $!evento, $!{evento}
  • 28.
  • 29. NVelocity – Síntaxe VTL - Diretivas • Começam sempre por # • Podem ter { } • Acabam sempre por #end – Excepto o #SET • É case sensitive – Todas as directivas são em minúsculas – As referências também são case sensitive
  • 30. NVelocity – Síntaxe VTL - Diretivas #SET – Estabelece o valor do identificador VTL – #set( $evento = “Netponto” ) – Suporta listas, arrays, contantes, literais e variáveis Nota: Admintindo que $evento = “Netponto” “$envento” != ‘$evento’ => Netponto != $evento
  • 31. NVelocity – Síntaxe VTL - Diretivas Expressões aritméticas: Operação Exemplo Adição #set( $value = $foo + 1 ) Subtração #set( $value = $foo - 1 ) Multiplicação #set( $value = $foo * 1 ) Divisão #set( $value = $foo / 1 ) Resto #set( $value = $foo % 1 )
  • 32. NVelocity – Síntaxe VTL – Diretivas – Controlo de Fluxo #IF / #IF-#ELSE / #IF-#ELSEIF-#ELSE #IF (Expressão Booleana) [ #ELSEIF (Expressão Booleana) ] [ #ELSE] #END
  • 33. NVelocity – Síntaxe VTL – Diretivas – Controlo de Fluxo Expressões Booleanas: Operador Simbolo Alternativo Equals Number == eq #if( $foo == 42 ) Equals String == eq #if( $foo == "bar" ) Object Equivalence == eq #if( $foo == $bar ) Not Equals != ne #if( $foo != $bar ) Greater Than > gt #if( $foo > 42 ) Less Than < lt #if( $foo < 42 ) Greater Than or Equal To >= ge #if( $foo >= 42 ) Less Than or Equal To <= le #if( $foo <= 42 ) ! not Boolean NOT Exemplo #if( !$foo )
  • 34. NVelocity – Síntaxe VTL – Diretivas - Loops #FOREACH #FOREACH (Lista) #END
  • 35. NVelocity – Síntaxe VTL – Diretivas - Loops Fancy Foreach loops: Directiva Significado #EACH Texto que aparece em cada item #BEFORE Texto que aparece antes de cada item #AFTER Texto que aparece depois de cada item #BETWEEN Texto que aparece entre de cada item #ODD Texto que aparece no item impar #EVEN Texto que aparece no item par #NODATA O conteudo é gerado caso seja nulo #BEFOREALL O que aparece antes de todos os items #AFTERALL O que aparece depoisde todos os items
  • 36. NVelocity – Síntaxe VTL - Diretivas #INCLUDE Importa um ou vários ficheiro(s) local(ais) #include ( "one.txt" ) Não é feito o render do ficheiro #PARSE Importa um ficheiro local e faz render dele #parse ( "one.vm" )
  • 37. NVelocity – Síntaxe VTL - Diretivas #BREAK – Pára a rendarização do scope corrente #break #STOP – Pára o processamento do template #break – Útil para debugging
  • 38. NVelocity – Síntaxe VTL - Diretivas #EVALUATE Avaliar referências VTL #evaluate($foo) #DEFINE Atribuir um bloco VTL a uma referência #define( $block )Hello $who #end #set( $who = 'World!' ) $block
  • 40.
  • 42. NVelocity – Síntaxe VTL - Escaping Porquê? – VTL usa o $ e o # • É necessário apresentar estes símbolos Como? – Com o caracter backslash: ‘’ Resultado? – Comboio de caracteres para apresentar.
  • 43. NVelocity – Síntaxe VTL - Formatação – As directivas são em minúsculas – As referências são case sensitive – Não é necessária identação – Pode ser tudo numa única linha
  • 44. NVelocity – Síntaxe VTL - Ranges • Não existe o #FOR • Mas o #FOREACH é iterável – [n..m] – #foreach( $foo in [1..5] ) $foo #end (1 2 3 4 5) – #foreach( $bar in [2..-2] ) $bar #end (2 1 0 -1 -2)
  • 45. NVelocity – Síntaxe VTL – Good to Know • Numero da Iteração através $velocityCount • Aceder a uma posição da coleção – $collection.get_Item(index) • $Events.get_Item(3) • $Events.get_Item(3).EventName • $Events.get_Item(3).EventLocalization
  • 46. Conclusão • • • • Simples de Aprender Simples de Usar É possivel ser um motor de views no ASP.NET MVC Têm potencial para curiosos – Geração de Código – Emails – Outros
  • 47.
  • 48. Referências VTL Reference Guide [visitado Novembro/2013] – http://velocity.apache.org/engine/releases/velocity-1.5/vtl-reference-guide.html Apache Developer Guide [visitado Novembro/2013] – http://velocity.apache.org/engine/devel/developer-guide.html Apache User Guide [visitado Novembro/2013] – http://velocity.apache.org/engine/devel/user-guide.html Castle Project Nvelocity [visitado Novembro/2013] – http://docs.castleproject.org/MonoRail.NVelocity.ashx NVelocity and Collections (and Possibly Arrays) [visitado Novembro/2013] – http://thiglife.com/2008/06/04/nvelocity-and-collections-and-possibly-arrays/
  • 52. Próximas reuniões presenciais 23/11/2013 – Novembro (Lisboa) 30/11/2013 – Novembro (Porto) 14/12/2013 – Dezembro (Lisboa) 18/01/2014 – Janeiro (Lisboa) Reserva estes dias na agenda! :)