Padrões em Web Development

Este documento aborda os Padrões (best-practices) em Desenvolvimento de soluções online que a DoWeDo-IT aplica aos processos de codificação das doSolutions. Edite-o apenas quando possa contribuir muito significativamente para a melhoria e correcção do seu conteúdo. Caso pretenda somente discutir acerca do seu conteúdo, usa o documento de discussão correspondente.

Gestão de Versões

A DoWeDo-IT usa diversos repositórios Subversion para gerir as várias revisões ao código-fonte de cada uma das soluções FOSS com que trabalha.

SkeletonRep

Cada repositório começa com a importação de uma estrutura hierárquica de pastas que serão mais tarde usadas nos processos de controlo de versões:

  • clients/ - esta pasta irá conter todas as instalações em clientes que usam a solução gerida no repositório. É uma falha de segurança caso seja preciso transferir dumps do repositório entre colaboradores.
  • libraries/ - esta pasta irá conter todas as libraries externas à solução gerida no repositório que são necessárias ao correcto funcionamento da solução.
  • migrations/ - esta pasta irá conter todas as migrações da solução gerida no repositório. Uma migração é uma ramificação da solução com o propósito de corrigir (manutenção correctiva) ou extender (manutenção evolutiva) certas e determinadas funcionalidades.
  • releases/ - esta pasta irá conter todas as versões da solução gerida no repositório que são disponibilizadas aos clientes.
  • sources/ - esta pasta irá conter o código-fonte principal e estável da solução gerida no repositório.
  • vendors/ - esta pasta irá conter as sucessivas versões da solução base da solução gerida no repositório. Normalmente, cada doSolution tem por base uma reconhecida solução à qual extende e corrige certas e determinadas funcionalidades, a fim de adequar a solução base ao mercado Português.

SkeletonSites

Existem 3 pastas de topo, que estão directamente relacionadas com a gestão de revisões das soluções:

  • doClients/ - esta pasta contém todos os sites implantados pela DoWeDo-IT nos clientes. Cada site corresponde à aplicação de uma ou mais soluções FOSS num ou mais sub-domains do cliente.
  • doSolutions/ - esta pasta contém todas as soluções integradas ou desenvolvidas pela DoWeDo-IT.
  • doVendors/ - esta pasta contém todas as soluções FOSS externas à DoWeDo-IT que estão implantadas em um ou mais clientes ou então que são a base de uma ou mais soluções doSolutions.

Cada pasta está associada a um conjunto de repositório, independentes entre si:

  • Cada doClient/«site»/ está associado a um repositório exclusivo, dentro da pasta doClients/ na hierarquia de repositórios.
  • Cada doSolutions/«doSolution»/ está associada a um repositório exclusivo, dentro da pasta doSolutions/ na hierarquia de repositórios.
  • Cada doVendors/«solution»/ está associada a um repositório exclusivo, dentro da pasta doSolutions/ na hierarquia de repositórios.

As pastas de topo doSolutions/ e doVendors/ partilham o mesmo repositório, que corresponde à pasta doSolutions/«doSolution»/. Isto simplifica os processos de merging sempre que sai uma nova versão da solução base da doSolution correspondente. Por sua vez, as sub-pastas doSolutions/«doSolution»/ e doVendors/«solution»/ apresentam todas a mesma estrutura hierárquica:

  • migrations/ - esta pasta contém todas as migrações em desenvolvimento relacionadas com a solução ou site do cliente.
  • pristine/ - esta pasta é uma cópia exacta do código-fonte em produção. É útil somente para comparar o código-fonte que está em produção (versão estável mais recente) com o código-fonte que se encontra na pasta sources/ do repositório da doSolution.
  • sources/ - esta pasta é usada para efectuar actualizações ao código-fonte principal e estável, que se encontra numa pasta do repositório da solução correspondente. Essa pasta no respositório será a pasta migrations/«migração» ou a pasta vendors/«solução». A primeira é usada exclusivamente com migrações da doSolution em questão, enquanto que a segunda é usada exclusivamente com novas revisões à solução base da doSolution.

Procedimentos

Os procedimentos afectam as pastas das seguintes formas:

  • Import - este procedimento lê o código-fonte da versão inicial da solução a partir de um destas pastas:
    • doClients/migrations/«solução»/ - que corresponde à versão inicial a importar para o repositório da solução implementada no sub-domain correspondente do serviço de alojamento do cliente. Esta importação será efectuada para a sub-pasta clients/«cliente»/«sub-domain»/ do repositório da doSolution.
    • doSolution/migrations/«v0.0.0»/ - que corresponde à versão inicial a importar para o tronco principal no repositório da doSolution. Esta importação será efectuada para a sub-pasta sources/ do repositório da doSolution.
    • doVendors/migrations/«v0.0.0.»/ - que corresponde à versão inicial a importar para sub-pasta vendors/«solução» do repositório da doSolution que é baseada nesta solução.
  • Commit - este procedimento lê o código-fonte actualizado numa destas pastas:
    • doClients/«sub-domain»/ - que corresponde à versão em produção no sub-domain correspondente do serviço de alojamento do cliente. Esta actualização será efectuada para a sub-pasta clients/«cliente»/«sub-domain»/ do repositório da doSolution.
    • doSolution/«sources»/ - que corresponde à versão estável mais recente que é necessário actualizar para o tronco principal no repositório da doSolution. Esta actualização será efectuada para a sub-pasta sources/ do repositório da doSolution.
    • doVendors/«sources»/ - que corresponde à versão mais recente e actual (mesmo não sendo a mais estável) da solução base da doSolution. Esta actualização será efectuada para sub-pasta vendors/«solução» do repositório da doSolution.
  • Export - este procedimento exporta o código-fonte actualizado para uma destas pastas:
    • doClients/«sub-domain»/ - que corresponde à versão em produção no sub-domain correspondente do serviço de alojamento do cliente. Esta exportação é sempre feita a partir da sub-pasta clients/«cliente»/«sub-domain»/ do repositório da doSolution.
    • doSolution/«pristine»/ - que corresponde à versão estável mais recente que é necessário actualizar para o tronco principal no repositório da doSolution. Esta exportação é sempre feita a partir da sub-pasta sources/ do repositório da doSolution.
    • doVendors/«pristine»/ - que corresponde à versão mais recente e actual (mesmo não sendo a mais estável) da solução base da doSolution. Esta exportação é sempre feita a partir da sub-pasta vendors/«solução» do repositório da doSolution.
  • Checkout - este procedimento coloca uma cópia de trabalho do código-fonte para uma destas pastas:
    • doSolution/migrations/«migração»/ - que corresponde à preparação da ramificação do código-fonte estável, na sub-pasta sources/ do repositório da doSolution, para um novo trabalho de migração. Após o checkout concluir, é obrigatório efectuar-se primeiro o branching da cópia de trabalho para uma sub-pasta migrations/«migração» do repositório da doSolution e depois o switching da cópia de trabalho para esta nova ramificação.
    • doSolution/«sources»/ - somente nos casos em que esta pasta foi acidentalmente removida. O checkout é feito sempre a partir da sub-pasta sources/ do repositório da doSolution.
    • doVendors/«sources»/ - somente nos casos em que esta pasta foi acidentalmente removida. O checkout é feito sempre a partir da sub-pasta vendors/«solução»/ do repositório da doSolution.
  • Merge - este procedimento consolida as alterações entre migrações e versão estável através de uma destas pastas:
    • doSolution/migrations/«migração»/ - esta cópia de trabalho, sincronizada com a ramificação migrations/«migração» do repositório, é usada para consolidar as alterações ao código-fonte com a versão estável existente na pasta sources/ do repositório da doSolution. Este procedimento é executado somente quando a migração termina com sucesso, sendo o passo seguinte a remoção da sub-pasta migrations/«migração» do repositório.

Truques e Dicas

Dentro da pasta migrations/, exterior ao repositório Subversion, é prático usar este comando Shell:

  for d in `ls -dAF  * | grep "/" | sed s:/::`; do cd $d ; find . -type f > ../$d.lst; cd ..; done

Este comando tem como resultado o output de ficheiros que têm como conteúdo a lista de todos os ficheiros correspondentes à versão da solução existentes na sub-pasta respectiva. Estas listas podem depois, através de ferramentas idênticas ao WinMerge, serem comparadas entre si a fim de se identificar de forma rápida e prática quais os ficheiros que são para remover de uma versão anterior para uma versão posterior.

O seu funcionamento explica-se forma breve:

  • O comando ls encontra todas as entradas, mesmo escondidas por causa de ter activo o argumento -A, somente da pasta actual onde o comando é executado, porque está restrito com o argumento -d. O argumento -F é útil para formatar de forma distinta a apresentação das entradas que são pastas das que são ficheiros.
  • O comando grep filtra todas as entradas para retornar somente as que são pastas, graças ao filtro “/”.
  • O comando sed remove o caractér de formatação que indica que as entradas são pastas da lista a retornar ao ciclo. Isto é importante porque o nome da entrada será usado mais à frente para nomear o ficheiro com o conteúdo de cada pasta.
  • O comando for vai executar para cada entrada retornada (sub-pastas da pasta corrente) o comando que:
    • Muda temporariamente para a sub-pasta actual no ciclo.
    • Lista todos os ficheiros dessa mesma sub-pasta. O comando find é usado com o argumento -type f para que a listagem se restringa a ficheiros e exclua as pastas da sub-pasta actual.
    • Retorna à pasta corrente antes de passar à próxima iteração.

NOTA: É preciso mudar temporariamente para a sub-pasta do ciclo para que o ficheiro com o conteúdo de cada sub-pasta, que deve corresponder a uma e uma só versão da solução, não contenha o seu próprio nome. Porque senão, a comparação de todas as linhas daria diferenças, já que duas versões têm obrigatoriamente representações diferentes.

 
  patterns/webdevelopment.txt · Last modified: 28/Jan/2008 23:55
 
 
Recent changes RSS feed Recent changes RSS feed Creative Commons License
Valid XHTML 1.0 Valid CSS Driven by DokuWiki