Acabei de publicar o primeiro exemplo de uma aplicação implementada sobre a minha framework MVC, o Olive.
Porquê escrever uma framework? Porquê chamar-lhe Olive? Essas respostas já estão na (parca) documentação que coloquei no wiki. Mas posso adiantar que Olive é algo muito português, que reporta às origens beirãs da minha família (também válido para outros portugueses, desde algarvios a transmontanos). E também que é divertido ter componentes da aplicação que se chamam OliveTree ou OliveField.
A framework está em rápido desenvolvimento e conto ter uma versão 1 totalmente documentada até ao final de 2008. Quem se interessar pelo assunto pode entrar em contacto comigo, porque a Olive precisa de alguma ajuda.
Posso-vos dizer que é um projecto interessante, por esta e aquela razão, mas sou suspeito. Vejam por vocês mesmos.
Para já apenas as layers de Controlo e Output estão verdadeiramente funcionais e os exemplos publicados são parcos, mas já mostram algumas das características interessantes do projecto, tais como flexibilidade (output por smarty ou old schoool, configuração por xml, yaml ou db, ajax por html, json ou xml), modularidade (controls, modules, components, widgets), performance (uma obsessão) e sintaxe produtiva (pelo menos divertida).
Quanto à camada dos dados, o M do MVC, está a sofrer um refactor verdadeiramente intestinal: no original a class central (OliveConnection) foi desenvolvida como Singleton para facilitar o acesso aos métodos de carregamento das definições de tabelas, views, procedures, etc… tipo:
$res = OliveConnection::table('blog')->row($id);
Burrice, porque isso não permitia fazer várias ligações, ligações a bases de dados diferentes por exemplo. Enfim… agora o acesso passará a ser feito através de um método estático na class da aplicação, que retorna uma conexão por pedido (ou a conexão primária por defeito)
// conexão primária (primeira a ser criada)
$res = OliveApp::connection()->table('blog')->row($id);
// chamar conexão por nome
$res = OliveApp::connection('remote')->table('blog')->result();
ou
// criar query SELECT sobre tabela/view "blog"
$res = OliveApp::connection()->select('blog')
// escolher campos
->fields('data', 'titulo', 'texto', 'autor.nome AS autor_nome')
// filtrar
->where_equals('categoria_id', $cat_id)
// ordenar
->orderby('data DESC')
// limitar
->limit(10);
Também planeio implementar no próximo sprint artefactos como “embrulhar” os resultados das querys numa class que implemente a interface Iterator (PHP5) para permitir
// cool
foreach($res as $row) { ... }
// em vez de old school
while($row = $db->fetch_row($res)) { ... }
Mas antes disso, actualizar a documentação.




Latest Comments
RSSAndré Torgal, J Leandro, Joana Torgal, vanessa, Carlos Martins, btt starbiker, Pedro Cardoso
vanessa
StreetGuy, ASP World Tour 2008 Indonesia Tiago Pires - Kelly Slater | Andrezero
vanessa, Joana Torgal, André Torgal, bizuka
Alf
André Torgal, vanessa