Neobase 2.0: a evolução do framework PHP para desenvolvimento web
1. Neobase 2.0
A evolução do framework para desenvolvimento
web visando as necessidades do mercado
2. Sobre o framework
Desenvolvimento totalmente orientado a objetos
Baseado em componentes
Dirigido a eventos
Manipulação da interface através de código no servidor
Separação entre o HTML e a lógica de criação da interface
Sincronização do estado da interface no cliente e no servidor
Comunicação cliente-servidor transparente utilizando AJAX
3. Necessidades identificadas
Cache de páginas e de consultas ao banco
Internacionalização
Log de erros
Controle da aplicação através da configuração
Suportar outros serviços comuns à aplicações web
4. Proposta de trabalho
Novas API’s de cache, log, internacionalização e
serviços
Hot spot: Application
Reestruturação do framework
Pacote de exceções
5. Outras melhorias
Otimização do monitoramento de alterações utilizando
uma variação do padrão observer
Redução do tamanho da mensagem de sincronização
de 50% a 75%
Abstração da renderização da saída
Simplificação da manipulação de eventos
Simplificação da criação de componentes
9. Sobre o site
/layouts/InternalLayout.php
<div id="page_margins">
<div id="page_content">
<php:UIHelper id="header" sectionName="about" />
<div id="main">
<div id="content" class="clearfix">
<php:PlaceHolder id="mainContent" />
</div>
</div>
<php:UIHelper id="footer" />
</div>
</div>
10. Sobre o site
/layouts/InternalLayout.php
<div id="page_margins">
<div id="page_content">
<php:UIHelper id="header" sectionName="about" />
<div id="main">
<div id="content" class="clearfix">
<php:PlaceHolder id="mainContent" />
</div>
</div>
<php:UIHelper id="footer" />
</div>
</div>
11. Componente Placeholder
/about.php
<?php require_once('loadBaze.php'); ?>
<php:Panel id="mainContent">
<img src="/images/tx_the_motivation.jpg" alt="The Motivation" />
The motivation is lorem ipsum factus!
<img src="/images/tx_main_features.jpg" alt="Main Features" />
Something about the features goes here
<img src="/images/tx_the_future.jpg" alt="The Future" />
What is waiting for us?
</php:Panel>
12. Componente UIHelper
/classes/site/ui/UIHelper.class.php
import('system.web.ui.PageComponent');
class UIHelper extends PageComponent implements IRenderable, IRenderer
{
public static $baseFolder;
public function hasCustomRenderer() {
return true;
}
public function getCustomRenderer() {
return $this;
}
public function render(IRenderable $object, IWriter $writer) {
$content = file_get_contents(self::$baseFolder.str_replace('.',DIRECTORY_SEPARATOR, $this->id).'.html');
$writer->write(preg_replace_callback('|{{([w_]+)}}|', array($this, 'replaceHook'), $content));
}
public function replaceHook($matches)
{
if($this->hasAttribute($matches[1]))
return $this->getAttribute($matches[1]);
return $matches[0];
}
}
UIHelper::$baseFolder = System::getApp()->getConfig()->DocRoot .'/helpers/';
13. Componente UIHelper
/classes/site/ui/UIHelper.class.php
import('system.web.ui.PageComponent');
class UIHelper extends PageComponent implements IRenderable, IRenderer
{
public static $baseFolder;
public function hasCustomRenderer() {
return true;
}
public function getCustomRenderer() {
return $this;
}
public function render(IRenderable $object, IWriter $writer) {
$content = file_get_contents(self::$baseFolder.str_replace('.',DIRECTORY_SEPARATOR, $this->id).'.html');
$writer->write(preg_replace_callback('|{{([w_]+)}}|', array($this, 'replaceHook'), $content));
}
public function replaceHook($matches)
{
if($this->hasAttribute($matches[1]))
return $this->getAttribute($matches[1]);
return $matches[0];
}
}
UIHelper::$baseFolder = System::getApp()->getConfig()->DocRoot .'/helpers/';
14. Mensurando o trabalho
Neobase Neobase 2.0
80000
64000
48000
32000
16000
PHP Comentários Javascript
HTML 0
Total
Estatísticas providas por ohloh.net
15. Mensurando o trabalho
Neobase Neobase 2.0
Linhas de código 31.782 73.820
Esforço estimado 5 pessoa-anos 11 pessoa-anos
Custo estimado $ 269.499 $ 613.536
Estatísticas providas por ohloh.net