Quarta-feira, Agosto 18, 2010

Spaghetti Framework PHP

Há alguns meses comecei um projeto de tamanho razoável, e não queria continuar na linha em que eu vinha seguindo com php: projetos despadronizados, com linguagem estruturada e difíceis de dar manutenção. Conversando com o Chavão (www.chavao.net/) ele me indicou o spaghetti.

Pelo definição do próprio site do projeto (que é brasileiro, mantido por brasileiros e documentado por brasileiros) “Spaghetti* é um framework escrito em PHP para ajudar a tornar o seu dia-a-dia mais produtivo e divertido.”. Na prática, com o Spaghetti algumas tarefas que dariam grande trabalho e seriam repetitivas, acabam se tornando práticas, fáceis e intuitivas.


O spaghetti trabalha com o modelo mvc. O que é mvc e algumas características mais profundas sobre isso podem ser encontradas no site do projeto. Em resumo, o MVC ajuda a separar casca e amendoim. Não entendeu? MVC deixa a sua lógica de banco de dados separada da lógica de programação que fica também separada da exibição do conteúdo gerado.


Confesso que no começo é um pouco complicado, mas após uma lida básica na documentação já é possível trabalhar sobre a plataforma.


Uma das vantagens do spaghetti é que ele é leve, apenas alguns kbs, isso viabiliza o uso. A configuração é muito simples e a curva de aprendizado é compensatória, mas daí você diz: Guimesmo, eu só faço site pra farmácia e açougue, pra que eu vou usar um framework? Eu respondo: padronizar suas aplicações, evitar desperdício de código, facilitar a manutenção e agilizar o seu trabalho para novos projetos, independente do porte da aplicação.


Um exemplo de como o spaghetti pode ser viavel mesmo para pequenas aplicações:


Digamos que o site do açougue use um sistema de pedidos. Os pedidos podem ser editados e excluidos pela administraçaõ e enviados pelo usuário. Julgando que o banco de dados já foi configurado e a exibição também, você teria em php puro:


function edit($id){

$query = 'select * from pedidos where id = '.$id;

$res = mysql_query($query);

$pedido = mysql_fetch_array($res);

return $pedido;

}

function save($id = null){

if($id){

$query = 'update pedidos set '.../* campos para atualizacao */

}

else{

$query = 'insert into pedidos (…) values() '.../* campos para atualizacao */

}

$res = mysql_query($query);

return $res;

}


já com o spaghetti:

public function edit($id){

$pedido = $this->Pedidos->firstById($id);

$this->set('pedido', $pedido);

}

public function save(){

$save = $this->Pedidos->save($this->data);

$this->set('save', $save);

}


Sim, é só isso. Na verdade é necessária configuração do banco de dados, criação do model e das views correspondentes aos métodos. Também estamos julgando dados enviados via POST. No spaghetti pode ser evitado o transtorno de adicionar novamente todas as variáveis do POST caso elas sejam correspondentes ao existente no banco. Claro que validação de dados é necessária nos dois casos, mas para um exemplo prático, uma aplicação que eu usaria 2 dias com spaghetti eu levei 5 com php estruturado. Por que eu usei php estruturado? O spaghetti precisa do mod_rewrite do apache habilitado, e nem todos os servidores permitem isso (principalmente pela incompetência dos administradores). Alguém pode perguntar onde foi parar a função para salvamento em caso de edição. O spaghetti identifica se deve editar ou criar um novo pelo envio da chave primaria nas informações de salvamento. Enviando o id via post ele identificará que deve salvar uma página existente. Simples.


Infelizmente a documentação não é um forte da comunidade spaghetti ainda (segundo o próprio Júlio), os colaboradores não são tão numerosos, mas considero um projeto de futuro (mas que pra mim já é presente). E fica o convite para desenvolvedores mais experientes e dispostos a colaborar com o projeto.


http://www.spaghettiphp.org


PS: Parabéns aos idealizadores e mantenedores do projeto. Infelizmente não consegui colaborar muito até aqui, mas o quanto eu puder divulgar este projeto e colaborar com novos usuários, podem contar comigo.


PS2: O comentário sobre a documentação se deve ao fato de boa parte do framework naõ estar citada na documentação oficial, assim existem muitas funções do framework que não são usadas por simples desconhecimento (por exemplo a classe inflector, que se eu conhecece antes me pouparia pelo menos 8 horas de trabalho em um projeto que desenvolvi).


Até

1 comentários:

Chavão disse...

Eu estou agora fazendo meu TCC e já tenho toda a estrutura montada em mente, antes eu pensava em usar um framework desses de MVC como Spaghetti* ou CakePHP, mas revendo alguns conceitos eu acho que o melhor para criar aplicações grandes é criar em 3 camadas e usar um MVC na apresentação. Como esses frameworks são muito engessados eu pretendo criar o meu, é muito simples criar isso.

Mas em casos de aplicações pequenas acho que esses frameworks matam a pau mesmo, fica uma programação bem organizada e fácil de fazer.