seven_palestra_banco_dados_servidores

89
Banco de Dados Cleber @ Tavares Junior .com D6, em homenagem ao Felipe Simões e ao Mairon Luz ;-) ... E ao Paulo Store o/

Upload: cleber-tavares-jr

Post on 14-Nov-2014

615 views

Category:

Education


4 download

DESCRIPTION

Palestra sobre banco de dados e servidores na Seven

TRANSCRIPT

Page 1: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

D6, em homenagem ao Felipe Simões e ao Mairon Luz ;-)

... E ao Paulo Store o/

Page 2: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

O que são?

Em informática, resumidamente, são coleções de informações armazenadas, que relacionadas dão valor de negócio à um sistema / empresa.

(Traduzindo em jogos: são o login do jogador e sua senha, seus pontos e níveis de personagem, seu equipamento e suas informaçõe$ de crédito)

Dito isto, nós NÃO vamos falar sobre banco de dados...

... apenas.

Page 3: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Vamos tentar mostrar toda a estrutura que envolve um Banco de Dados e seu desenvolvimento.

KISS: Keep It Simple, Student.

Mas existem muito mais coisas escondidas entre seu servidor nas nuvens e seu cliente / jogo no seu computador, Student...

Page 4: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Primeiro, retomando nossa definição de Banco de Dados, nos primeiríssimos sistemas informatizados (antes da década de 70), estas informações eram guardadas no próprio sistema de arquivos do S.O.

E isso gerava uma série de problemas...

A partir daí surgiram os SGBD – Sistemas Gerenciadores de Banco de Dados. Na década de 80 surgiram os SGBD relacionais, que estão em domínio até hoje. Ou seja, tabelas. (MySQL, SQLite, PostgreSQL, Oracle$)

Em tempos recentes vem surgindo com cada vez mais força os SGBD Orientados à Objetos, ou não-relacionais, com o movimento NoSQL (já vamos falar do SQL), como os MongoDB, CouchDB, e os da Google e Amazon

Page 5: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Em suma, existem várias tecnologias de bancos de dados, cada uma com uma característica própria (simples e pequenos, simples, simples e escalável, robustos e caros), alguns gratuitos, outros pagos por diversos valores... O profissional que deseja trabalhar com isso precisa saber avaliar.

Para lidar com todas estas diferenças, nos bancos de dados relacionais, foi criada uma linguagem padrão para manipulação das tabelas, a SQL (Structured Query Language, Linguagem de Consulta Estruturada), pela IBM no início dos anos 70.

Esta linguagem, assim como todas as outras linguagens de computador, evolui (estamos no SQL:2003). Infelizmente nem todos os SGBD seguem o padrão da linguagem à risca.

Isto é uma típica representação esquemática de um SGBD:

Page 6: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

E a seguir uma breve apresentação da linguagem SQL. Ela serve para criar as tabelas, as colunas / campos, inserir os dados, fazer a busca e o relacionamento entre eles:

Page 7: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

SQL, resumo / palavras - chave

Comandos de Criação (DDL)

Comandos de Controle (DCL)

Comandos de Transação (DTL)

CREATE TABLE GRANT ROLLBACK

ALTER INDEX REVOKE

DROP VIEW

Page 8: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

SQL, resumo / palavras - chave

Comandos de Manipulação (DML)

Comandos de Consulta (DQL)

INSERT SELECT

SELECT

UPDATE

DELETE

CRUD!

Page 9: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

O comando de consulta SELECT é o mais utilizado, nele temos as cláusulas:

FROM, WHERE, HAVING, GROUP BY, ORDER BY, DISTINCT, JOIN

Os operadores lógicos:

AND, OR, NOT

Os operadores relacionais (muitas características do SQL foram baseadas na álgebra relacional):

<, >, <=, >=., =, <>, BETWEEN, LIKE, IN

As funções de agregação:

AVG, COUNT, SUM, MAX, MIN

Page 10: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Pequenos exemplos de comandos SQL:

CREATE TABLE Players(

id INT NOT NULL AUTO_INCREMENT, name VARCHAR (60) NOT NULL, birth DATE, phone CHAR (8), PRIMARY KEY (id)

)

Players

id name birth phone

Page 11: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Pequenos exemplos de comandos SQL:

INSERT INTO Players VALUES (1, ‘Clever Tavares Jr.', 1900-08-19,’’);

Players

id name birth phone

1 Clever Tavares Jr. 1900-08-19

Page 12: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Pequenos exemplos de comandos SQL:

INSERT INTO Players VALUES (3, ‘', 19/08/1900,26667070);

Precisamos de uma maneira de assegurar que valores inválidos não sejam inseridos! Nossos dados tem que ser consistentes!

Players

id name birth phone

1 Clever Tavares Jr. 1900-08-19

3 19/08/1900 26667070

Page 13: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Pequenos exemplos de comandos SQL:

SELECT * FROM Players;

SELECT name AS Nick FROM Player;

Players

id name birth phone

1 Clever Tavares Jr. 1900-08-19

Players

Nick

Clever Tavares Jr.

Page 14: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Pequenos exemplos de comandos SQL:

SELECT name, birth FROM Players WHERE name LIKE ‘Cleber‘;

SELECT TOP 5 name, value FROM Points ORDER BY value desc; /*;-)*/

Chega!

Players

name birth

Page 15: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Mas não temos apenas nosso banco de dados no processo. Para este ser acessado remotamente, via web, precisamos de uma tecnologia de servidor, alguma aplicação / serviço que fique online o tempo todo provendo esta comunicação.

Importante, esta aplicação ou programa, que nós desenvolvemos com linguagens de servidor como C# / Java / PHP / Python / Ruby, deve ser criada seguindo o esquema de implementação MVC, Model-View-Controller, Modelo(Banco)-Visualização(Página, Cliente)-Controlador(Acesso), ou seja, mantendo sua lógica de implementação independente da camada de visualização e dos dados.

A “camada de visualização”, pode ser uma página no navegador do jogador, ou um jogo em Flash no navegador do jogador, ou um jogo no computador do jogador. É ali no cliente que alguns dados devem ser tratados, com tecnologias / linguagens de cliente (html –eu sei-, css, javascript, em Flash, em Unity…), e outros devem vir/ir do/para o servidor, mantendo sempre o balanceamento adequado.

Page 16: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Nosso esquema fica assim:

Page 17: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Claro que eu posso ter vários clientes:

Page 18: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Estes clientes podem gerar uma carga / volume de acesso muito grande de tal modo que eu precise fazer o balanceamento / distribuição entre vários servidores

Page 19: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Normalmente a base de dados é compartilhada, mas às vezes não! E é preciso ter muito cuidado para manter os dados coesos / coerentes / sincronizados!

Page 20: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

E às vezes, as máquinas / computadores que são responsáveis pela aplicação servidora e os SGBD´s nem são as mesmas, ou estão no mesmo lugar físico, e sim espalhadas pelo mundo onde for mais conveniente.

É o conceito “nas nuvens”. Que auxilia na escabilidade do projeto / jogo.

Page 21: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Tá, então quais tecnologias vamos escolher para nosso exemplo?

1- Um computador rodando Windows 7 comum. ATENÇÃO! A grande maioria dos servidores é Linux, e boa parte das linguagens de servidor pode ser usada tanto em um quanto no outro (Java, PHP, Python, Ruby, MySQL…)

2- O banco de dados MySQL, que é fácil de instalar, configurar e rodar no Windows e é bastante suportado, tendo uma interface gráfica facilitadora.

3- A linguagem de programação Ruby e o framework de aplicações web Ruby On Rails, ambos compatíveis com Windows e Linux. Existem muitas páginas famosas que usam Rails, sendo este bastante famoso (Twitter…) e ele tem uma forte comunidade. Apesar de não ser muito fácil usar em Windows, pode facilitar o desenvolvimento com scaffold… e é diferente ;-)

Vamos lá detalhar isso:

Page 22: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

1- Sobre o sistema operacional, vale ressaltar aqui que uma vez que você desenvolva no Windows, o processo de *deploy*, ou colocar em produção / funcionamento em um servidor com Linux, pode ser trabalhoso. Mas os servidores Linux são mais baratos (e robustos e seguros…). Fica o aviso. Não veremos isso aqui hoje.

Page 23: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

2- Banco de dados MySQL;

http://www.mysql.com/downloads/mysql/

Gratuito na versão Community, com código fonte se quiser, 30 megas.

Esta é a versão mais nova.

Você pode experimentarversões mais antigas(5.0 e 5.1) se tiverproblemas de compatibilidade

Page 24: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Page 25: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Page 26: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Page 27: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Page 28: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Page 29: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Page 30: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Page 31: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Podemos testar como acima para saber se tudo está ok.Podemos fazer tudo via linha de comando (cmd).Mas também podemos ter um editor visual para ajudar.Aí entra o SQLyog:

http://www.webyog.com/en/http://code.google.com/p/sqlyog/downloads/list

Vamos fazer o download da versão Community gratuita e instalar.

Page 32: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Page 33: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Page 34: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Page 35: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Page 36: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Page 37: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Page 38: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Temos agora o banco de dados MySQL funcionando com um editor visual no Windows, vamos ao próximo passo:

3- A linguagem de programação Ruby e o framework de aplicações web Ruby On Rails, ambos compatíveis com Windows e Linux e também tendo vários editores.

http://rubyinstaller.org/

Page 39: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Page 40: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Page 41: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Page 42: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Não esquecer de na mesma página baixar o Ruby Development Kit, que permitirá instalar extensões nativas como o mysql2!

Assim que terminar o download, você deverá extrair os arquivos para o diretório / pasta C:\ruby193\devkit, que não existe e precisa ser criado.

Agora, volte ao terminal. Você precisará instalar o DevKit na instalação atual do Ruby. Para isso, digite os comandos:

 cd C:\Ruby193\devkit para ir ao diretório que você acabou de extrair. Execute os comandos:

ruby dk.rb init e depois ruby dk.rb install

Page 43: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Não acabou :-/ Nós ainda precisamos configurar o Ruby para suporte ao MySQL.

Para fazer isso, acesse a página de downloads do MySQL e clique no link MySQL Connectors. Precisaremos da versão "Connector/C (libmysql)". Na página de download, escolha a opção sem o instalador. Escolha a versão de 32-bits. Isso é necessário porque o Ruby é 32-bits e, mesmo que a instalação do MySQL tenha sido feita em 64-bits, o conector que será usado por ele deve ter a mesma arquitetura. Extraia os arquivos e copie o arquivo mysql-connector-c-noinstall-6.0.2-win32/lib/libmysql.dll para o diretório C:\Ruby193\bin. Isso é necessário pois DLLs precisam estar no PATH do Windows e, o diretório bin do Ruby no Windows está lá.

Page 44: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

http://www.mysql.com/downloads/connector/

Page 45: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

ATENÇÃO! Os passos acima são os mais problemáticos. Se não conseguir rodar seu servidor, veja solução mais abaixo.

Page 46: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Lembrando que:

“Nada é totalmente fácil ou difícil, esta é a beleza do mundo. Cabe à pessoa julgar as ferramentas para alcançar seus objetivos.”

A linguagem Ruby junto com o framework para desenvolvimento web Rails tem suas vantagens em relação ao PHP, incluindo um modelo de MVC (já discutido) embutido.

Com o até aqui feito, temos esta nova linguagem em nossa máquina habilitada para trabalhar com MySQL. Mas a linguagem não é tudo. Assim como em C# eu tenho o framework (conjunto de classes) XNA para me facilitar o desenvolvimento de jogos, em AS3 eu tenho a library / biblioteca Box2D para física, em ambiente Mobile / Java eu tenho uma série de frameworks (AndEngine, Cactus2D, XNAndroid) para jogos, ou posso usar a engine (grande conjunto de ferramentas) Unity em C# ou Boo, eu preciso de um framework para direcionar meu aplicativo / ranking na web.

Este framework se chama Ruby On Rails (Ruby nos trilhos). Vamos instalá-lo.

Page 47: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

O comando acima instala as classes sem a documentação, que é demorada…

Page 48: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Aproveitando que estamos falando sobre isso tudo, não poderia deixar de chamar a atenção para se verificar se está instalado na máquina também um sistema de controle de versão. Isto é importantíssimo em qualquer desenvolvimento de sistemas ou jogos. Sugiro o TortoiseSVN, e aos mais corajosos o Git, que já tem versão estável para Windows. (TortoiseGIT…) Mas foge ao escopo deste trabalho falar sobre isso agora.Vamos atualizar coisas que o rails precisa para criar uma app (bundle…):

gem updategem install rake –v 0.9.2.2gem install coffee-script-source -v 1.3.3gem install execjs -v 1.4.0gem install coffee-script -v 2.2.0gem install coffee-rails -v 3.2.2gem install jquery-rails -v 2.0.2gem install mysql2 -v 0.3.11gem install sass –v 3.1.20gem install sass-rails -v 3.2.5gem install uglifier -v 1.2.6

Page 49: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Alternativa para tanta atualização: http://railsftw.bryanbibat.net/

MUITO BOM!!!

Page 50: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Agora podemos dar o comando para criar nossa aplicação / app rails:

Rails new teste –d mysql

Com este comando (que deve ser dado em um diretório adequado) criamos um subdiretório chamado teste, onde se cria toda a estrutura (quq já vamos ver) do Rails, usando um banco de dados mysql (sqlite é o padrão)

Mas espere! E para editar os arquivos? Vamos ficar na linha de comando o tempo todo? Não… Existem muitos editores (a.k.a. Flash IDE, Flash Develop, Visual Studio, Eclipse, Mono Develop) que você pode usar para Rails, que reconhecem a sintaxe do Ruby, desde gratuitos até pagos de diversos valores. Sugestões temos o Notepad++, Redcar, Scite, gEdit… o próprio Eclipse…

Mas vamos ficar de NetBeans. Mesmo com os problemas dele… (peso e obsolência)

Page 51: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

http://netbeans.org/downloads/6.9.1

Page 52: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Page 53: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Page 54: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Page 55: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Veja como o Rails organiza nossos arquivos (lembrando esta pasta foi importada, nenhum arquivo

foi criado pelo NetBeans)

Lembra do conceito de MVC para melhorar nossa lógica do servidor? Model-View-Controller?

Repare que temos uma pasta de Models (para os modelos que

representam justo a base de dados)Uma pasta de Views, para as visualizações/layoutsE uma pasta de Controllers/lógica

Além disso uma pasta com Helpers/Auxiliares, um enviador de email, Confidurações, pasta Pública, Logs de servidor, arquivos de teste e documentação (Rails te orienta a fazer os testes de lógica de servidor!), bibliotecas e… migrations!

Page 56: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

As migrations tem a ver com nosso banco de dados, são as mudanças nele ao longo do desenvolvimento de nossa aplicação. Pense na importância disso. Se seu banco de dados não corresponder à lógica da sua aplicação (controllers / views), você corre o risco de tentar exibir algo que não existe (erro na certa) ou de guardar informações desnecessárias (desperdício). Coerência.

“Uma página é uma exibição de um banco de dados”, controverso… especialmente em jogos.

As migrations e o models nos “protegem” de ter que lidar com a linguagem SQL diretamente…

Vamos gerar no nosso banco / página as informações anteriores de Player (o inglês é quase necessário para programar web / sistemas / rails / páginas…)

Page 57: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

rails generate scaffold Player name:string birth:date phone:string

Page 58: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Scaffold = arcabouço = migration (mudança no BD) + Model (representação do BD no servidor) + Controller (fluxo de telas) + View (exibição), tudo junto.

Vamos colocar nossa aplicação nesta versão: Migrar o Banco de Dados

Opa, fomos negados! Que houve? Não conseguimos acesso aoBanco de Dados. Vamos editar nosso arquivo de configuração no NetBeans.

Page 59: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Page 60: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Este é nosso arquivo de configuração do acesso do servidor na base de dados, toda tecnologia de servidor tem essa configuração. Repare que Rails nos dá automaticamente 3 tabelas (que devem ser criadas), chamadas por padrão de nome_development, nome_teste, nome_production, com configurações separadas para cada uma. Tudo para orientar o bom desenvolvimento!

Vamos configurar a tabela de desenvolvimento:

Page 61: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Page 62: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Uma vez com isso salvo vamos rodar nossa migração:

Ok. Vamos rodar nosso servidor e ver isso?

Como assim rodar o servidor? Ah, não contei? Quando você faz o código, precisa de algo para executá-lo. Um Apache Server da vida, vai ler seu código e atender às requisições de página.

Sorte nossa que o Rails vem com um servidor embutido, o WEBrick, basta chamá-lo assim: (ah, e podemos depois mudar de servidor se quisermos, inclusive para Apache)

Page 63: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

rails server

Repare que ele está “ouvindo” (atendendo requisições) em http://localhost:3000

Page 64: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Tcharam! Temos uma página rodando, “Hello World” (antes mesmo da migration)

Page 65: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

E olhando direto no SQLyog nossa base de dados, vemos que ela já está com a tabela correta (lembre, um comando para gerar os arquivos e outro para migrar)

Page 66: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Se olharmos no NetBeans nossas pastas e arquivos, vemos que temos já controllers e views para Player:

Page 67: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Lembrando que os controllers direcionam o fluxo de nossa aplicação, ou seja, que página mostrar. Sabe uma página “index”? Pois é, olha lá o método de resposta à ela ali…

E começamos aqui a ver um pouco mais de perto a linguagem Ruby. Não é tão difícil, é? AS funções/métodos são defs, com end no final (parece Basic). O @players é um conjunto de players… sim, instâncias de uma classe.

Conhece o RPG Maker? Sabe sua linguagem de programação? RGSS? Ruby Game Script System! Isso aí! São a mesma.

Page 68: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Repare que eu estou na verdade mapeando um método de acesso à página do próprio protocolo http, o GET. O GET sem número em um controller lê todos os objeots correspondentes, o GET/numero retorna o objeto com aquele id, assim como os métodos POST, PUT e DELETE estão mapeados… isso se chama REST e é uma técnica muito eficiente.

Em Rails, não saia dos “trilhos”. Mantenha seus nomes corretos e tudo fará sentido e funcionará automaticamente. Esta é a filosofia do framework.

Vamos “olhar” a view?

Page 69: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Repare como funciona bem como uma camada de visualização, sem interferir nos dados e podendo ser mudada à vontade. Inclusive traduzida, sem mudar a base.

Page 70: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

O que temos aqui é aquela lista de @players sendo mostrada. Repare no “for each”. Epa, peraí… eu não escrevi código nenhum, será que eu já posso ver isso? Hum…

Page 71: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Uau! Eu tenho uma página com uma listagem dos jogadores e um cadastro!

1- Vamos ver seu código fonte, o html?

Page 72: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Page 73: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Repare que eu tenho um código “limpo” no cliente, com a importação automática de alguns javascripts padrões (posso alterar), alguns metanames padrões (também posso alterar) e a tabela com um link para criar um novo jogador.

É assim que funciona uma tecnologia de servidor. Gera uma página ou informação dinâmica e “cospe” ela para quem pedir. (perdão pelo termo, culpa do Carlos)

Voltando ao controller, ele responde à requisições html e também… xml! Como isso? Vamos acessar a mesma coisa, uma listagem dos jogadores, mas em xml:

Page 74: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Repare que ele não deu erro! Apenas mostrou o XML vazio, afinal, ainda não temos jogadores. Ou recordes, ou imagens, o que seja. Mas se tivéssemos estaria ali, sem nenhum esforço! Qual a importância disso? Se tivéssemos acessando estas informações pela página, mostramos o html. Mas se tivéssemos nosso cliente em Unity ou XNA ou Flash para mostrar a lsita de jogadores, por exemplo, qual a melhor maneira de fazer isso? XML!

Page 75: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

2- Muito bonito, mas a bagaça funciona?

Vamos tentar cadastrar um novo jogador:

Page 76: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

2- Muito bonito, mas a bagaça funciona?

Vamos tentar cadastrar um novo jogador:

Page 77: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

2- Muito bonito, mas a bagaça funciona?

Vamos tentar cadastrar um novo jogador:

Page 78: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

2- Muito bonito, mas a bagaça funciona?

Vamos tentar cadastrar um novo jogador:

Definitivamente funciona.

Page 79: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Mostrando um pouco de testes:

Page 80: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Uma vez com o banco populado, como fica o xml:

Page 81: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

De um player só:

Page 82: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

É possível ver o dump da database

Page 83: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Não satisfeito com os testes e a lógica de “negócio”, quer mais facilidade para criar a aplicação?

Lembra no início que nossa tabela tinha o nome do jogador como campo obrigatório? Pois é, vamos ao model do player (nosso correspondente da tabela) resolver isso:

Estava assim:

Ficou assim:

Só isso… vamos à página…

Page 84: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Se eu tentasse cadastrar em branco antes poderia…

Page 85: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Agora não mais…

Ah, as mensagens de erro são personalizáveis.

Page 86: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Quais validates exitem?

validates :terms_of_service, :acceptance => truevalidates :email, :confirmation => truevalidates :email_confirmation, :presence => truevalidates :legacy_code, :format => { :with => /\A[a-zA-Z]+\z/, # expressões regulares    :message => "Only letters allowed" }validates :name, :length => { :minimum => 2 }validates :bio, :length => { :maximum => 500 }validates :password, :length => { :in => 6..20 }validates :registration_number, :length => { :is => 6 }validates :email, :uniqueness => truehas_many :posts, :dependent => :destroyhas_one :image

Page 87: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Rails pode trabalhar com sistemas de arquivos, anexos, o que você quiser, de forma fácil, basta usar a imagninação e a pesquisa ;-)

Usanod os validates corretos você consegue montar os relacionamentos entre os modelos, e a busca de informações.

Page 88: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Uma ótima dica de documentação, não apenas de Ruby ou Rails, mas de dezenas de linguagens e frameworks:

Page 89: Seven_Palestra_Banco_Dados_Servidores

Banco de Dados

Cleber @ Tavares Junior .com

Uma ótima dica de documentação, não apenas de Ruby ou Rails, mas de dezenas de linguagens e frameworks: