models
.Esse diretório é particularmente importante devido a alguns fatores:
- Os arquivos do diretório
models
são executados em ordem alfabética; - É ali que ficam as definições das tabelas dos bancos de dados de sua aplicação;
- Os objetos definidos por esses arquivos ficam disponíveis com escopo global na aplicação. Ou seja, podem ser acessados pelos controladores e pelas views.
Algumas pessoas iniciantes têm certa dificuldade com isso e acham meio estranho esse comportamento. Eu também achava, até concluir que esse é o jeito mais intuitivo para tudo funcionar.
Entretanto, para evitar alguns inconvenientes que esse funcionamento pode trazer, precisamos adotar uma nomenclatura clara e o mais simples possível para organizar nossos scripts dentro do diretório
models
.Eu adoto a seguinte estrutura básica:
models/0_db.py
models/1_menu.py
models/5_models.py
models/5_validators.py
Eu renomeio o
db.py
gerado automaticamente pelo web2py para 0_db.py
. Assim, garanto que todas as definições básicas são executadas antes de qualquer coisa. O objeto DAL, que fornece toda a funcionalidade de acesso a dados, é criado nesse script.Também renomeio o
menu.py
para 1_menu.py
fazendo com que as definições de menu sejam executadas depois da instanciação do objeto DAL.Com esses nomes modificados, garanto que o esqueleto gerado automaticamente pelo web2py vai ser executado antes das partes que eu vou desenvolver depois.
A partir daí, escrevo o
models/5_models.py
com todas as definições de tabelas. Vale ressaltar que eu deixo dentro desse arquivo apenas os db.define_table()
.Para escrever os validadores, eu crio o
models/5_validators.py
. Mas por que separado? Primeiro, porque o web2py recomenda que você não coloque os validadores dentro do db.define_table()
. Segundo, porque nesse ponto eu tenho certeza de que todas as tabelas já foram definidas. Assim, garanto que qualquer referência cruzada entre elas funcione sem precisar alterar a ordem de criação delas. Às vezes isso desorganiza o script de criação das tabelas.Se eu tiver muitas tabelas, nada me impede de dividir a definição delas em vários scripts, por módulos, por exemplo:
5_models_estoque.py
, 5_models_financeiro.py
, etc. E, da mesma forma, os validadores.Aqui, sua criatividade é quem manda, mas lembre-se de alguns princípios:
Explícito é melhor do que implícito.
Simples é melhor do que complexo.
Linear é melhor do que encadeado.
A legibilidade conta.
Quando encontrar a ambiguidade, recuse a tentação de adivinhar.
Nenhum comentário:
Postar um comentário