2km Workshop: Desenvolvimento ágil com o CakePHP - Presentation Transcript
Workshop 1:
Desenvolvimento ágil com o CakePHP
Uma introdução ao
framework CakePHP e
suas contribuições para o
desenvolvimento ágil.
Agenda
Apresentação
Motivação
Desenvolvimento ágil
Princípios de desenvolvimento ágil
Recursos ágeis do CakePHP
O padrão MVC
O padrão ORM
Validações
Aplicação exemplo (Ajax blog)
Como aproveitar melhor tudo isso?
Agradecimentos
Agenda
Apresentação
A 2km é uma empresa mineira especializada no
desenvolvimento ágil de soluções para web utilizando
software livre.
+20 projetos utilizando o CakePHP nos últimos 12
meses.
Desenvolveu projetos para empresas e organizações como
Record Minas, PMDB-MG, Orca veículos entre outras.
Apresentação
Carlos Pires (Cadu) é bacharel em ciência da computação.
Desenvolve e é apaixonado pela web e por software livre desde 1999.
Trabalhou com Java(JEE) por mais de 6 anos em diversas empresas da
capital mineira. Ultimamente tem se dedicado ao CakePHP e à jQuery.
Quando não está andando de bike, está estudando línguas (inglês e
espanhol), curtindo um samba de raíz ou tomando uma cervejinha com
os amigos.
Daniel Golgher é tecnólogo em Processamento de Dados, Bacharel em
Sistema de Informação e Especialista em Engenharia de Software.
Desenvolve em PHP desde 2001. Gosta de software livre, especialmente
dos projetos: CakePHP, FreeBSD, MySQL, Apache, PHP, Python dentre
outros.
Nas horas vagas vai ao cinema com a namorada e passeia com o Baco
(São Bernardo).
Agenda
Motivação
Divulgar o framework CakePHP
Divulgar os novos cursos da 2km
Retribuir à comunidade de software livre
Combater o código 'espaguete'
Mostrar que programar pode ser divertido!
Agenda
Desenvolvimento ágil
Estórias de usuário
Programação em Pares
Programação orientada ao teste (TDD)
Refatoração (Refactoring)
Reunião em pé (Stand up meeting)
Sprints
Agenda
Princípios do desenvolvimento ágil
COC – Convention Over Con guration
DRY - Don't Repeat Yourself
KISS - Keep It Short and Simple or Keep It Simple Stupid
SoC - Separation of Concerns
YAGNI - You Ain't Gonna Need It
Agenda
Recursos ágeis do CakePHP
MVC [CoC e SoC]
ORM [CoC]
Validação [DRY e KISS]
Testes unitários (SimpleTest) [TDD]
Helpers, Components e Behaviors [DRY]
Geração de código (Bake) [Productivity]
Agenda
Código espaguete?
<div style='display:<?=$valor?$tipo1:$tipo2; ?>'>
<? if($flag == 0){ ?>
<script>
var a = [<?=implode(',',$lista)?>];
<? $SQL = \"SELECT * FROM clientes WHERE 1 ORDER BY data ASC LIMIT 1 OFFSET 1 \" ?>
<? }else{ ?>
<b> entroh aqui flag= <?=$flag //debugue ?> </b>
<? $SQL = \"SELECT * FROM clientes WHERE \".$cond.\" ORDER BY data ASC LIMIT 1 OFFSET \".
$flag ?>
<script>
//
var a= [<?=implode(',',$lista_)?>];
<? } ?>
// debugue
alert(a);
<<?php echo '/'.\"script\"; // kuIDaDeNHo c/AxXx bAhRRaxXXxx ?>>
</div>
Fonte: http://desciclo.pedia.ws/wiki/PHP
Código MVC
<?php
//Arquivo da Classe de Modelo
class Usuario extends AppModel {
var $name = 'Usuario';
var $displayField = 'nome';
}
?>
models/usuario.php
<?php
//Arquivo da Classe de Controle
class UsuariosController extends AppController {
function teste($grupo_id=null){
$usuarios=$this->Usuario->find('list',array('conditions'=>array('grupo_id'=>$grupo_id)));
$this->set(compact('usuarios'));
}
}
?>
controllers/usuarios_controller.php
<?php
//Arquivo da Classe de Visão
$form->create('Usuario',array('action'=>'teste'));
$form->input('usuario');
$form->end('Enviar');
?>
views/usuarios/teste.ctp
Código em uma camada?
<?php
$conn = mysql_connect('localhost','root','senha');
mysql_select_db('meu_banco',$conn);
$query = 'SELECT id,nome FROM usuarios WHERE grupo=\"'.$_POST['grupo_id'].'\"';
$result = mysql_query($query);
?>
<html>
<head>...</head>
<body>
<form action=\"teste.php\">
Selecione o usuário:
<select name='usuario'>
<?php
while($row = mysql_fetch_row($result)){
echo\"<option id=\".$row[0].\">\".$row[1].\"</option>\";
}
?>
</select>
<input type='submit'>
</form>
</body>
</html>
Exemplo de código em uma camada
Agenda
O padrão ORM
1
2
4
3
Tabelas e relacionamentos
O padrão ORM
<?php
class Produto extends AppModel {
1
var $name=\"Produto\";
2
var $hasOne = array('Descricao');
var $hasAndBelongsToMany = array('Usuario');
3
var $belongsTo = array('Categoria' => array(
'className' => 'Categoria',
'foreignKey' => 'categoria_id')
4
);
var $hasMany = array('Comentario' => array(
'className' => 'Comentario',
'foreignKey' => 'comentario_id',
'dependent' => false,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => ’’
)
);
}
?>
Classe do modelo Produto com os relacionamentos
Agenda
Validações
var $validate = array(
'login' => array('isUnique' => array(
'rule'=>'isUnique',
'message'=>'Este e-mail já existe na base de dados.'),
'email' => array(
'rule' => 'email',
'message' => 'O campo E-mail deve ser um email válido')
),
'senha' => array(
'rule' => array(
'confirmaSenha', 'senha'),
'message' => 'O campo senha e a confirmação da senha não conferem'
),
'confirma_senha' => array(
'rule' => 'alphanumeric',
'required' => true,
'message'=>'O campo confirmação da senha é obrigatório',
'on'=>'create'
),
'nome' => array(
'rule' => array('between', 2, 64),
'message' => 'O campo nome deve possuir de 2 a 64 caracteres')
);
function confirmaSenha($data) {
return $data ['senha'] == $this->data ['Usuario'] ['confirma_senha'];
}
models/usuario.php
Como aproveitar melhor tudo isso?
Fazendo os cursos de desenvolvimento web que a
2km interativa! está lançando:
Curso de CakePHP (Curso mais completo do
CakePHP no Brasil - 60 horas)
Curso de jQuery (Abordando as novidades da versão
1.3. Em breve)
Curso de Padrões Web (em breve)
Agenda
Agradecimentos
Agradecemos a presença de todos neste sábado e
esperamos vê-los nos próximos workshops!
Dúvidas, críticas, sugestões e doações para:
Carlos Pires (e-mail: carlos.pires@2km.com.br / Twitter: @cadu)
Daniel Golgher (e-mail: daniel@2km.com.br / Twitter: @golgher)
http://www.2km.com.br
0 comments
Post a comment