Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Programe para uma interface, não para uma implementação

Programe para uma interface, não para uma implementação

Lightning talk apresentada na Python Brasil 12

Diego Garcia

October 17, 2016
Tweet

More Decks by Diego Garcia

Other Decks in Programming

Transcript

  1. • Desenvolvedor a ~8 anos. • Desenvolvedor web a ~5

    anos. • Pythonista a ~3 anos. • Django, Tornado, Aiohttp, etc. • Vimmer (#vim <3). • Aspirante a Gopher (#Golang <3). • Backend developer at LuizaLabs. Diego Garcia
  2. from redis import StrictRedis class RedisStorage: def __init__(self): self.redis =

    StrictRedis() def get(self, key): return self.redis.get(key) def set(self, key, value): self.redis.set(key, value)
  3. from importlib import import_module def get_storage_backend(path): module_name, class_name = path.rsplit('.',

    1) module = import_module(module_name) backend_class = getattr(module, class_name) return backend_class() storage = get_storage_backend( 'storages.redis.RedisStorage' )
  4. Quem se preocupa com isso? • Django (ORM, Cache, etc).

    • Asyncio (EventLoop). • SqlAchemy (Connectors, Engines, etc). • ...
  5. Programar para uma interface já me salvou em uma blackfriday!

    Trocamos a API de cálculo de frete só virando uma chave.