15.12.2022 Views

Python Eficaz

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

class RealDatabase(object):

# ...

if __main__.TESTING:

Database = TestingDatabase

else:

Database = RealDatabase

O comportamento-chave a ser observado aqui é que o código rodando no escopo

do módulo – e não dentro de nenhuma função ou método – é código normal em

Python. Podemos usar um comando if no nível do módulo para decidir como o

módulo definirá os nomes, permitindo que os módulos sejam feitos sob medida

para os vários ambientes de deploy. Assim, evitamos ter de reproduzir itens

custosos, como, por exemplo, as configurações de banco de dados, quando não

são necessários. Podemos injetar implementações falsas ou forjadas que

facilitam o desenvolvimento e os testes interativos (consulte o Item 56: “Teste

absolutamente tudo com unittest”).

Nota

Em algum momento seus ambientes de desenvolvimento ficarão

complicados. Quando isso acontecer, você deve considerar removê-los de

constantes no módulo principal (como o TESTING do exemplo anterior) e

transferi-los para arquivos externos de configuração. Ferramentas como o

módulo nativo configparser permite manter as configurações de produção

separadas do código, uma distinção crucial quando colaboramos com as

equipes de operação.

Essa técnica pode ser usada para outros casos em que seja necessário contornar

condições externas. Por exemplo, caso saibamos que o programa deve funcionar

de forma diferente, dependendo da plataforma, podemos inspecionar o módulo

sys antes de definir estruturas de alto nível no módulo.

# db_connection.py

import sys

class Win32Database(object):

# ...

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!