wiki:WF/Metodologia

<html>

<ul><li>Somente uma classe por arquivo php;</li><li>Os nomes das classes iniciam sempre com letra maiúscula (padrão Java). Ex: Classe, NomeClasse.

<br /></li><li>Os nomes dos métodos seguem o padrão Java, onde é sempre

escrito com letras minúsculas, caso haja mais de uma palavra, a segunda

inicia com letra maiúscula. Ex: metodo, meuMetodo.</li><li>Para cada atributo, preferencialmente privado, de uma classe devem ser criados os respectivos métodos getter e setter, públicos, que adicionam uma camada a mais de validação.</li><li>Instâncias externas recebidas por uma classe via argumentos, devem ser transformados em atributos e NÃO PODEM ser manipulados diretamente, mas através de getters e setters.</li><li>Variáveis externas à classe em forma de array devem ser serializadas totalmente (criando uma classe que encapsule a funcionalidade da array) ou parcialmente (criando apenas um método).

<br /></li><li>Métodos com argumentos de tipo String que deve seguir valores padronizados, devem declarar constantes estáticas internas que serão utilizadas para minimizar o erro na passagem do argumento e também porque constantes aparecem no autocomplete dos editores por fazerem parte da classe.

<br /></li><li>Para conjuntos de classes que visam um mesmo objetivo porém implementando metodologias diferentes, como por exemplo classes de acesso a diferentes sistemas gerenciadores de banco de dados (SGBD), criar interfaces (PHP 5) ou mesmo classes (PHP 4) com o propósito de padronizar os métodos das classes onde a implementação é realmente feita. Isso possibilita criar uma classe de abstração genérica que possa acessar as mesmas funcionalidades de forma independente da metodologia (SGBD) utilizada.

<br /></li><li>Arquitetura 3 camadas:</li><ul><li>Camada de acesso a dados (DAL - Data Access Layer):

<br /></li><ul><li>Recupera dados de fontes como bancos de dados e arquivos XML, por exemplo e os fornecesse à camada de lógica de negócios.

<br /></li><li>Somente pode ser acessada e manipulada diretamente pela camada de lógica de negócios.</li><li>Não deve fazer restrições de segurança ou validação de dados, que são funções da camada de lógica de negócios.</li></ul><li>Camada de lógica de negócios (BLL - Business Logic Layer):</li><ul><li>Adiciona restrições de segurança sobre a camada de acesso a dados.

<br /></li><li>Adiciona validação de dados.</li><li>Manipula classe Smarty (ou subclasses dela) para geração da camada de apresentação, que contém formatação de dados.</li><li>Gerencia de códigos de erro de acordo com o mapeamento nos arquivos de configuração Smarty.

<br /></li></ul><li>Camada de apresentação (PL - Presentation Layer):</li><ul><li>Composta pelas páginas PHP acessadas diretamente pelo browser e templates Smarty.

<br /></li></ul><ul><li>Apresenta interface para interação (entrada de dados) com o usuário.

<br /></li><li>Formata e exibe dados brutos (raw data) vindos das camadas anteriores.

<br /></li><li>Trabalha somente com a camada de lógica de negócios.

<br /></li></ul><li>Arquivo de configuração do processo (shared.php):</li><ul><li>Responsável por fazer a união das três camadas e possibilitar o mecanismo de extensão das classes base de cada camada. Todos os includes do processo são feitos nesse arquivo.

<br /></li></ul></ul><li>usar comentário com tags Doxygen estilo JavaDoc;</li><li>Comentário mínimo para classes:</li><ul><li>bloco de comentário para a classe;</li><li>bloco de comentário para cada método;</li></ul><li>Comentário adicional recomendado:</li><ul><li>bloco de comentário para a lista de atributos da classe;</li><ul><li>@var tipo nome_variavel;</li><li>@brief descrição breve;</li><li>@public, @private ou @protected;</li><li>@see nome_metodo_getter_setter.

<br /></li></ul><li>comentários internos dos métodos.

<br /></li></ul><li>Padrão de nomenclatura de classes de inclusão class.nomeclasse[.extends.nomesuperclasse].inc.php.</li><li>tags exigidas para o bloco de comentário da classe:</li><ul><li>@class nome_classe;

<br /></li><li>@brief descrição breve;

<br /></li><li>@package nome_processo;</li><li>@author nome_desenvolvedor.</li></ul><li>tags exigidas para o bloco de comentário dos métodos</li><ul><li>@brief descrição breve;</li><li>@param tipo nome_parametro para cada parâmetro;</li><li>@return tipo_retorno;</li><li>@private, @public ou @protected visibilidade;</li><li>@throw nome_exceção;</li></ul><li>tags recomendadas para o bloco de comentário da classe:</li><ul><li>@bug descrição de bug</li><li>@todo tarefa pendente</li><li>@example nome_arquivo_com_exemplo_de_utilização_da_classe.</li></ul><li>tags recomendadas para o bloco de comentário dos métodos:</li><ul><li>@overload nome_método_sobrecarregado

<br /></li></ul><li>Nomenclatura das atividades e respectivas páginas PHP:</li><ul><li>Devem ser SEMPRE em português e serem um verbo (passar idéia de ação, atividade, comportamento), com a primeira letra maiúscula. Exemplo: Compor.php, Escrever.php, Finalizar.php.

<br/></li></ul><li>UtilizaçãodosseguintesWF_PadrõesdeProjeto)):</li><ul><li>((Singleton));</li><li>((Factory? .

<br /></li></ul></ul>

<br />

</html>