Versão 2.0.4

A versão 2.0.4 está disponível para download no seguinte link : http://code.google.com/p/sifraphp/downloads/list . Esta versão conta com muitas novidades :

  • Agora trabalha com URL amigáveis  -  é preciso o mod_rewrite
  • Utiliza o PDO na camada Model
  • Provê uma interface para helpers ( util para uso nas views )
  • Implementa uma interface de configuração, dessa forma é possivel realizar as configurações dos aplicativos através de arquivos .ini
  • Disponibiliza uma interface de configuração - para criar classes de configuração personalizadas
  • Disponibiliza uma interface para scripts (usado para a geração de componentes de interface)
  • Conta com um sistema de autenticação
  • Controle de exceções com geração de logs
  • Provê suporte ao desenvolvimento baseado em componentes

Uma das novidades é que agora é possível configurar a aplicação através de arquivos INI. Abaixo segue uma tabela explicativa dos parâmetros aceitáveis.



conf_database
Sessão de configuração de banco de dados
rdbms
Servidor de banco de dados. Este podem ser : mysql, sqlite, firebird. Mssql, sybase, pgsql, dblib
host
Localização do servidor de banco de dados, ou pasta onde estará localizado o arquivo de dados (sqlite)
Port
Porta do servidor de banco de dados. Não é necessário para rdbms sqlite
User
Usuário do servidor. Não é necessário para rdbms sqlite
Pass
Senha de usuário. Não é necessário para rdbms sqlite
Database
Base de dados que será utilizado na aplicação. No caso de rdbms sqlite é necessário informar o nome do arquivo
conf_path
Sessão de configuração de localizações
base_application
URI da aplicação
js_path
Nome das pastas de javascripts. O nome definido será subpasta de View
css_path
Nome das pastas de folhas de estilo. O nome definido será subpastas de View
img_path
Nome das pastas de imagens. O nome definido será subpasta de View
module_path
Nome da pasta de repositório de módulos
component_path
Localização da pasta raiz dos componentes
helper_path
Localização da pasta raiz dos helpers
conf_router
Sessão de configuração do roteador
default_module
Nome do modulo inicial da aplicação
default_controller
Nome do controlador padrão
default_action
Nome da ação padrão
template_name
Extensão dos arquivos de template
log_in_file
Se 1 as exceções serão lançadas em arquivos de log
log_path
Localização da pasta de logs


A conf_authetication, sessão de autenticação segue a sintaxe abaixo:
Para melhor visualização a tabela segue algumas diretivas :
Nome do usuário será representado por nuser.
Nome do módulo será representado por nmod
Nome do controlador será representado por nctr
Nome da ação será representado por nact


*.nuser = allow
NomeDoModulo acessível a todos os usuários
Nuser.nmod = allow
Nuser tem acesso completo ao modulo nmod
Nuser.nmod.nctr = allow
Nuser tem acessa completo ao controlador nctr
Nuser.nmod.nctr.nact = allow

Nuser acessa apenas a acao nact pertencente ao controlador nctr do modulo nmod



Após a configuração inicial devemos ler as configuração acima. Utilizamos as classes de configuração provida pelo SifraPHP para tal tarefa. Existem 5 classes de configuração, são elas :

  1. Nucleo_Configuration_Authentication → lê a sessão conf_authentication
  2. Nucleo_Configuration_Database → lê a sessão conf_database
  3. Nucleo_Configuration_Path → lê a sessão conf_path
  4. Nucleo_Configuration_Router → lê a sessão conf_router
  5. Nucleo_Configuration_Configuration → lê todas as sessões


As classes de configuração acima implementam uma interface chamada Nucleo_Configuration. Esta interface descreve um único método chamado setConfiguration que recebe como parâmetro uma string com o nome do arquivo de configuração.
Todas essas sessões podem estar localizada no mesmo arquivo de configuração ou em arquivos distintos.

Além disso foi removido os módulos de UI, estes serão a partir de agora, distribuídos como componentes. Em breve estarei disponibilizando alguns componentes como exemplo.
Outra novidade refere-se a camada View que pode contar com helpers, estes helpers devem implementar a interface Nucleo_Helper, com o método publico execute($params). Os helpers ajudam com tarefas comuns e bem específicos para a camada view.


Em breve estarei postando como utilizar alguns recursos !

Obrigado e até a próxima !

Próximas novidades em breve

Está em desenvolvimento a release 2.0.4, que por sinal introduz muitas novidades a fim de facilitar o desenvolvimento. A mudança mais radical será na camada model, além dessa camada alguns métodos do framework serão descontinuados – foram substituídos por métodos estáticos - e haverá possibilidade de configuração através de arquivos externos ini (arquivos de configuracao).

Na camada Model a biblioteca ADODB5 foi substituída pela PDO (PHP data objects) pois se tornou extensão nativa do PHP 5. Ela provê métodos de performance superior à ADODB5, porém não suporta o mapeamento de objetos em banco de dados relacionais. A tarefa ORM deverá ser realizada pelo próprio desenvolvedor ou há liberdade de escolha entre diversos frameworks capazes de realizar tal tarefa , como exemplo Doctrine.

Por existir constante preocupação com a velocidade de resposta, houve várias mudanças em algumas tarefas. A chamada de métodos estáticos é 4 vezes mais rápida do que a chamada de métodos não estáticos, por isso a substituição desses, entretanto,as tarefas (ou chamadas) atuais ainda continuam funcionando, isso implica que aplicativos construídas utilizando velhos métodos estarão compatíveis.

Para chamar por exemplo uma fábrica de controladores, não será preciso instanciar um objeto Nucleo_Controller_Factory, basta chamar pelo método estático Nucleo_Controller_Factory::dispatch().

Também será possível configurar o banco de dados, localização de pastas, chamadas padrões e regras de autenticação, em arquivos externos ao framework, isso contribui para garantir a segurança. Outra novidade é na classe Nucleo_Registry_Registry, nela foi inserido um método estático load capaz de ler um arquivo de configuração para setar constantes. Por exemplo, se o programa fizer uso de variáveis globais você terá que inseri-las através do método set ou load.

Se for utilizado o set(), você deverá inicia-las no próprio código, mas caso haja grande quantidade de variáveis predefinida , que podem mudar dependendo do trabalho, é possível declara-las em arquivos externos. Dessa forma se houver a necessidade de manutenção em seus aplicativos não será necessário manipular o código, apenas arquivos de configuração de variáveis globais.

Em breve (provavelmente dia 15 de Outubro) a próxima versão estará disponível , até lá mais novidades serão postadas !

Criando a Camada View (Utilizando a release 2.0.3)

Foi postado um tutorial sobre os conceitos básicos da camada VIEW. Este tutorial pode ser visto no seguinte link

Tutoriais

Além disso também foi criado um exemplo afim de expor o funcionamento de alguns conceitos do framework que pode ser baixado neste Link. O exemplo foi desenvolvido utilizando a release 2.0.3.
Para o funcionamento correto do exemplo basta configurar a localização do framework no arquivo index.php

Contamos com a colaboração de todos para manter o projeto !

Criando um Controlador

Este tutorial mostra como criar um controlador. A qualidade ficou um pouco ruim, mas acho que dá pra entender o que foi feito. Está sendo utilizado a release 2.0.1, que por sinal foi adicionado
um modulo de autenticação de usuários !

Nos próximos tutoriais irei mostrar como utiliza-lo.

A estrutura usada para o controlador foi a seguinte :

www //Pasta root do apache
Module //Nome da pasta root dos modulos (Este nome é o padrão)
Public //Modulo chamado Public
Controller //Pasta Controller (contém os controladores do modulo) pasta obrigatória
Index.php //Nome do controlador


Link para o video

Correção de Bugs ! release 2.0.1

Release 2.0.1 Disponível .Foram corrigidos alguns bugs na criação do datagrid, além disso foi inserido mais uma constante de configuração chama TEMPLATE_PATH. Esta constante refere-se a pasta de templates comuns em toda aplicação. Deve ser uma subpasta de PUBLIC_PATH.

Também foi criado um wiki com tutoriais. Ao longo das semanas vou postar tutoriais
e exemplos de aplicações.

Lista de Tutoriais
Lista de Downloads

SifraPHP Versão 2.0.0 ! Muito Melhor ........

Já faz um bom tempo que não adiciono nenhum post (Me falta tempo !!!), mas estou trabalhando no projeto desde a ultima versão disponibilizada. Terminei algumas mudanças no framework, tais como, a flexibilidade no uso das classes controllers, views e model. Esta versão está muito mais flexível.
Entretanto, por terem sido muita as mudanças na estrutura do framework, o sifraphp 2.0 não é compatível com as versões anteriores. Abaixo segue uma lista das mudanças realizadas :

  • O arquivo de configuração agora é o próprio index.php
  • É possível ter mais de um controller por Modulo
  • Mais variáveis de configuração
  • Componentes de interface gráfica que utilizam Ajax
  • Datagrid mais rápido e com mais funcionalidades e temas (Compativel com jQuery)
  • Forms com validadores
  • Possibilidade de instanciação das bibliotecas javascript jQuery e Ext
  • Melhor performance
  • Melhor trabalho com exceções (Nucleo_Exception)
  • Nome de classes melhoradas
  • Estrutura da aplicação mais flexível
  • Construção de Datagrids mais simples
Essas foram as principais mudanças. O framework pode ser baixado Aqui.

Principais clases:

Nucleo_Controller_Controller
Nucleo_Model_Model
Nucleo_Model_Table
Nucleo_UI_Form
Nucleo_UI_Datagrid

PARA CRIAR UM CONTROLLER A CLASSE DEVE SER UMA CLASSE FILHA DE Nucleo_Controller_Controller!

Logo será postado um pequeno tutorial de utilização do framework, além disso já está disponível um exemplo no site do projeto !

Abaixo segue exemplos de configuração simples do arquivo index.php:

define('DEFAULT_MODULE','Publico');// Obrigatorio ! Caso não coloque isso uma mensagem de ajuda de configuração é impressa !
define('DEFAULT_CONTROLLER','Intranet');
define('USER','facil');
define('PASS','123');
define('HOST','test');
define('DATABASE','meus_testes');
/***********************************/

require("../Nucleo/Load/Class.php");// Obrigatorio

Versão 0.1.4 : Versão Mais Robusta

Foi adicionado à versão 0.1.4, novas características para as camadas View e Model, além de ter sido implementado funções para criação de Datagrids que fazem uso da biblioteca jQuery.
A principal novidade da camada View trata-se do suporte de formularios - que realizam requisições Ajax-, função de inserção de mascaras para campos do tipo input e criação de Datagrids Editáveis e não editáveis.
Na camada Model foi adicionado dois métodos, são else : builderDataGridXml , editDataGrid que constroe o arquivo XML para datagrids e edita os dados desses mesmos datagrids, respectivamente, através de consultas ao banco.
O sifraphp lhe proporciona a possibilidade de implementar seus próprios métodos de geração de XML e edição de dados para datagrids.Quanto aos templates foram adicionados quatro novas variáveis, são elas:

$CALL_JAVASCRIPT --- > chama a biblioteca jQuery
$CALL_FUNCTION_FMASK --> chama as funções de manipulação de mascara para campos input
$CALL_FUNCTION_FAJAX --> funções para requisições Ajax de formularios
$CALL_FUNCTION_DAJAX --> funções para criação de datagrids

Além do objeto BuilderDataGrid que cria a estrutura HTML necessária para a criação de DataGrids, foi gerado a documentação do Framework , afim de tornar mais amigavel a manipulação dos métodos e classes.

Na pŕoxima postagem iremos criar um aplicação que faz uso de todas essas funcionalidades, até a próxima !



Versão 0.1.2 Disponível

Está disponível a versão 0.1.2 do SifraPHP.As principais modificações se econtram na estrutura do framework, bem como a nova camada Model.
Um novo padrão de projeto também foi adicionado , Active Record, do ADOdb5.

A nova versão pode ser baixado no link a seguir :

SifraPHP-v-0.1.2

Repositório

Abaixo segue o primeiro de uma serie de tutoriais introdutórios, o video referente a este tutorial encontra-se em Tutorial001 ou junto com o
pacote SifraPHP -v-0.1.2_com_tutorial

Baixe o Tutorial em PDF clicando Aqui

Arquitetura do SifraPHP

Desenvolver produtos de alta qualidade é dever de todo engenheiro de software.Não basta dominar uma linguagem de programação, faz-se necessário criar mais do que simplesmente milhões de linhas de códigos.O bom analista sempre coloca em prática suas habilidades mais importantes, modelagem de dados e engenharia de requisitos, todavia, esta tarefa é muito complexa, pois , além de modelar dados e levantar requisitos, concentra esforços em realizar projetos arquiteturais.

Graças aos frameworks, nosso trabalho de projetar arquiteturas torna-se reduzido e menos desgastante porque “fornecem uma infra-estrutura do esqueleto de implementação específica [RP06]”, ou seja, uma “miniarquitetura reusável que fornece a estrutura e o comportamento génericos para uma família de abstrações de software dentro de um contexto[RP06]”.

Baseando-se nos padrões de projetos, design paterns,típicos de linguagens orientada a objetos,foi concebido o framework SifraPHP.

Simples Framework PHP ou simplesmente SifraPHP, implementa um padrão arquitetural chamado MVC (Model View Controller).MVC tem a função de arquiteturar o software em três diferentes camadas: interface gráfica (View), regra do negócio ou modelagem de dados(Model) e controlador(Controller).

A camada View objetiva solucionar alguns problemas restringido o controle apenas sobre a interface.Esta característica é extremamente importante pois as telas não precisão saber como os dados serão tratados,ao excluir a camada de manipulação dos dados, também conhecida por Model, podemos inserir em nosso projeto um tempo único à implementação da IHM(interface homem máquina).

Projetar interfaces gráficas sempre foi um trabalho arduo, isso se dá ao fato de que a maioria dos usuários julgam uma aplicação apenas por sua aparência, porém, PIG(projeto de interface gráfica) traz trés grandes preocupações ao desenvolvedor : interface entre componentes do software, padronização entre interfaces (de produtos diferentes) e por último, interface entre homem máquina.Por não ser uma tarefa trivial e não haver exclusividade a construção desta,é comum notarmos aplicações com excelentes funcionalidades , apliacadas ao contexto do problema, mas que deixam a desejar no quisito homem máquina.

Analisar estruturas menores é um trabalho mais simples e menos sucetível a erros, por isso implementar a regra do negócio sem que essa interfira na apresentação do softwar se torna uma tarefa confiável, isto resulta em um software de alta qualidade.Entretanto , sistemas não são funcionais se não houver uma comunicação entre Model(regra do negocio) e View(interface, telas).

A fim de solucionar este problema, a camada controller realiza operações de comunicação entre as camadas View e Model, através de mensagens.

Em resumo ,projetar sistemas é se orientar em informações aplicadas ao conhecimento técnico.Ao se tratar de engenharia de software ,para se obter essas informações, é preciso conhecer padrões de projetos e saber implementa-los, por isso o SifraPHP foi criado, para elevar o conhecimento e facilitar o uso do padrão MVC em parceria com a linguagem PHP.

A versão 0.1.1 pode ser encontrada em :: SifraPHP_v.0.1.1.rar

Referências Bibliográficas
[RP06] Pressman, Roger S., Engenharia de Software,McGraw-Hill,2006.

Projeto SifraPHP

Olá Pessoal !

Meu nome é Renan Abreu e este blog foi criado afim de expor um trabalho pessoal, com a linguagem PHP.

O objetivo do blog é fornecer informações sobre padrões de projetos e divulgar minhas atividades referentes ao projeto SifraPHP , além de obter sugestões e ajuda para melhoria dos trabalhos que estão e serão realizados.Apesar de ter relativamente pouca experiencia , posso contribuir para a comunidade do software livre.

Espero que gostem do conteudo e opnem sobre os tópicos que serão postados.

Muito obrigado Renan Abreu.