SlideShare uma empresa Scribd logo
1 de 15
Baixar para ler offline
Neobase 2.0
A evolução do framework para desenvolvimento
web visando as necessidades do mercado
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
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
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
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
Comparação das estruturas
Antiga estrutura de pacotes (esq.) e nova (direita)
Neobase 2.0 em ação
Sobre o site
                                         /layouts/InternalLayout.php
<?php require_once('loadBaze.php'); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:php="http://www.neoconn.com/namespaces/php"
version="1.0">
<head>
<title>NeoBase PHP Framework</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- (en) Add your meta data here -->
<link href="/css/basemod.css" rel="stylesheet" type="text/css" />
<!--[if lte IE 7]>
<link href="/css/basemod-ie.css" rel="stylesheet" type="text/css" />
<![endif]-->
<link href="/css/default.css" rel="stylesheet" type="text/css" />
<link href="/css/internal.css" rel="stylesheet" type="text/css" />
<style>
#aboutLink {
	    color: #EF9900;
}
</style>
</head>
<body>
<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>
</body>
</html>
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>
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>
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>
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/';
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/';
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
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

Mais conteúdo relacionado

Mais procurados

Aula 12 Relatório - Tabelas
Aula 12   Relatório - TabelasAula 12   Relatório - Tabelas
Aula 12 Relatório - TabelasDalton Martins
 
Introdução ao jquery
Introdução ao jqueryIntrodução ao jquery
Introdução ao jqueryYuri Costa
 
Programando com estilo e Performance
Programando com estilo e Performance Programando com estilo e Performance
Programando com estilo e Performance Tarcisio Silva
 
J query javascript para seres humanos
J query   javascript para seres humanosJ query   javascript para seres humanos
J query javascript para seres humanosnobios
 
Criando e consumindo Web Services (REST) com o CakePHP
Criando e consumindo Web Services (REST) com o CakePHPCriando e consumindo Web Services (REST) com o CakePHP
Criando e consumindo Web Services (REST) com o CakePHP2km interativa!
 
Menu dinâmico com kendoUI
Menu dinâmico com kendoUIMenu dinâmico com kendoUI
Menu dinâmico com kendoUIDouglas Lira
 
Desevolvimento Web Client-side - jQuery
Desevolvimento Web Client-side - jQueryDesevolvimento Web Client-side - jQuery
Desevolvimento Web Client-side - jQueryGuilherme
 
Aula 01 PHP+MySQL - LabMM4
Aula 01 PHP+MySQL - LabMM4Aula 01 PHP+MySQL - LabMM4
Aula 01 PHP+MySQL - LabMM4Carlos Santos
 
Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Luis Gustavo Almeida
 
Acesso a banco de dados com JDBC
Acesso a banco de dados com JDBCAcesso a banco de dados com JDBC
Acesso a banco de dados com JDBCEduardo Mendes
 
PHP Aula07 - conexão Com Banco de Dados
PHP Aula07 - conexão Com Banco de DadosPHP Aula07 - conexão Com Banco de Dados
PHP Aula07 - conexão Com Banco de DadosDaniel Brandão
 

Mais procurados (20)

Aula 12 Relatório - Tabelas
Aula 12   Relatório - TabelasAula 12   Relatório - Tabelas
Aula 12 Relatório - Tabelas
 
jQuery na Prática!
jQuery na Prática!jQuery na Prática!
jQuery na Prática!
 
Introdução ao jquery
Introdução ao jqueryIntrodução ao jquery
Introdução ao jquery
 
Programando com estilo e Performance
Programando com estilo e Performance Programando com estilo e Performance
Programando com estilo e Performance
 
J query javascript para seres humanos
J query   javascript para seres humanosJ query   javascript para seres humanos
J query javascript para seres humanos
 
Programação Web com jQuery
Programação Web com jQueryProgramação Web com jQuery
Programação Web com jQuery
 
Workshop Django
Workshop DjangoWorkshop Django
Workshop Django
 
Criando e consumindo Web Services (REST) com o CakePHP
Criando e consumindo Web Services (REST) com o CakePHPCriando e consumindo Web Services (REST) com o CakePHP
Criando e consumindo Web Services (REST) com o CakePHP
 
Menu dinâmico com kendoUI
Menu dinâmico com kendoUIMenu dinâmico com kendoUI
Menu dinâmico com kendoUI
 
Desevolvimento Web Client-side - jQuery
Desevolvimento Web Client-side - jQueryDesevolvimento Web Client-side - jQuery
Desevolvimento Web Client-side - jQuery
 
PHP ao Extremo
PHP ao ExtremoPHP ao Extremo
PHP ao Extremo
 
Aula 01 PHP+MySQL - LabMM4
Aula 01 PHP+MySQL - LabMM4Aula 01 PHP+MySQL - LabMM4
Aula 01 PHP+MySQL - LabMM4
 
Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP
 
jQuery Simplificando o JavaScript
jQuery Simplificando o JavaScriptjQuery Simplificando o JavaScript
jQuery Simplificando o JavaScript
 
Acesso a banco de dados com JDBC
Acesso a banco de dados com JDBCAcesso a banco de dados com JDBC
Acesso a banco de dados com JDBC
 
JDBC
JDBCJDBC
JDBC
 
JSTL em 21mins
JSTL em 21minsJSTL em 21mins
JSTL em 21mins
 
PHP Aula07 - conexão Com Banco de Dados
PHP Aula07 - conexão Com Banco de DadosPHP Aula07 - conexão Com Banco de Dados
PHP Aula07 - conexão Com Banco de Dados
 
Php curl - Coleta de dados na web
Php curl - Coleta de dados na webPhp curl - Coleta de dados na web
Php curl - Coleta de dados na web
 
JQuery
JQuery JQuery
JQuery
 

Semelhante a Neobase 2.0: a evolução do framework PHP para desenvolvimento web

Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkPablo Dall'Oglio
 
Zend Framework 1.11
Zend Framework 1.11Zend Framework 1.11
Zend Framework 1.11Cezar Souza
 
Apache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesApache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesCI&T
 
Desenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkDesenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkMarcelo Rodrigo
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOLgrupoweblovers
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosRodrigo Nossal
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Vinícius de Paula
 
Backbone.js nas trincheiras
Backbone.js nas trincheirasBackbone.js nas trincheiras
Backbone.js nas trincheirasLambda 3
 
Evento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontEvento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontMichel Ribeiro
 
365on Lab Asp.Net MVC Fundamentos 01 Overview
365on Lab Asp.Net MVC Fundamentos 01 Overview365on Lab Asp.Net MVC Fundamentos 01 Overview
365on Lab Asp.Net MVC Fundamentos 01 OverviewAlexsandro Almeida
 
React - Compartilhando estado entre componentes
React - Compartilhando estado entre componentesReact - Compartilhando estado entre componentes
React - Compartilhando estado entre componentesJefferson Mariano de Souza
 
Symfony - Framework PHP de alta produtividade
Symfony - Framework PHP de alta produtividadeSymfony - Framework PHP de alta produtividade
Symfony - Framework PHP de alta produtividadeHugo Magalhães
 
Introdução ao Symfony 2 - SfCon 2012
Introdução ao Symfony 2 - SfCon 2012Introdução ao Symfony 2 - SfCon 2012
Introdução ao Symfony 2 - SfCon 2012Hugo Magalhães
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Carlos Duarte do Nascimento
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineCampus Party Brasil
 
Backbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosBackbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosHenrique Gogó
 

Semelhante a Neobase 2.0: a evolução do framework PHP para desenvolvimento web (20)

Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
 
Zend Framework 1.11
Zend Framework 1.11Zend Framework 1.11
Zend Framework 1.11
 
Apache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesApache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentes
 
Desenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkDesenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana framework
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutos
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.
 
Tutorial.yii
Tutorial.yiiTutorial.yii
Tutorial.yii
 
Backbone.js nas trincheiras
Backbone.js nas trincheirasBackbone.js nas trincheiras
Backbone.js nas trincheiras
 
Aplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com DjangoAplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com Django
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
 
Evento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontEvento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de Front
 
365on Lab Asp.Net MVC Fundamentos 01 Overview
365on Lab Asp.Net MVC Fundamentos 01 Overview365on Lab Asp.Net MVC Fundamentos 01 Overview
365on Lab Asp.Net MVC Fundamentos 01 Overview
 
React - Compartilhando estado entre componentes
React - Compartilhando estado entre componentesReact - Compartilhando estado entre componentes
React - Compartilhando estado entre componentes
 
Symfony - Framework PHP de alta produtividade
Symfony - Framework PHP de alta produtividadeSymfony - Framework PHP de alta produtividade
Symfony - Framework PHP de alta produtividade
 
Introdução ao Symfony 2 - SfCon 2012
Introdução ao Symfony 2 - SfCon 2012Introdução ao Symfony 2 - SfCon 2012
Introdução ao Symfony 2 - SfCon 2012
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App Engine
 
Backbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosBackbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectados
 
React js
React js React js
React js
 

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
  • 6. Comparação das estruturas Antiga estrutura de pacotes (esq.) e nova (direita)
  • 7. Neobase 2.0 em ação
  • 8. Sobre o site /layouts/InternalLayout.php <?php require_once('loadBaze.php'); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:php="http://www.neoconn.com/namespaces/php" version="1.0"> <head> <title>NeoBase PHP Framework</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <!-- (en) Add your meta data here --> <link href="/css/basemod.css" rel="stylesheet" type="text/css" /> <!--[if lte IE 7]> <link href="/css/basemod-ie.css" rel="stylesheet" type="text/css" /> <![endif]--> <link href="/css/default.css" rel="stylesheet" type="text/css" /> <link href="/css/internal.css" rel="stylesheet" type="text/css" /> <style> #aboutLink { color: #EF9900; } </style> </head> <body> <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> </body> </html>
  • 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