jesustorresdev / slack-badges-bot

2 stars 1 forks source link

Implementa el comando /badges give usuario medalla #12

Closed mbdaso closed 5 years ago

mbdaso commented 5 years ago

Pongo algunas dudas aquí y el resto las comento en el código:

  1. Hice dos clases, BlockBuilder para formatear los mensajes de slack y OpenBadges para convertir entidades en los objetos de openbadges. Esto serían adaptadores o servicios? Son clases que están pensadas para ser usadas por otra cosa, no tienen funcionalidad por si solas y no dependen de nadie. Puse las dos en adaptadores pero me pegan más como servicios.

  2. Hay alguna regla de estilo sobre cuándo y cómo usar los raise Exception(...)? Así los estoy usando yo, por ejemplo en adapters/slack.py:

    async def slash_command_handler(self, request):
        try:
            ...
            elif text.startswith('give'):
                response = await self.give_badge(text.replace('give','',1))
            ...
        except:
            ...
        return response
async def give_badge(self, text):
       ...
        if not slack_id:
            raise ValueError(f'Nombre de usuario no encontrado {slack_username}')
       ...
        return web.json_response(\
               ...
                status=200)

yo los estoy usando para detectar errores porque me parece más comodo encerrarlo todo en un try ... except y luego cuando escribo el método sólo lanzo una excepción y no necesito acordarme de escribir cosas como:

if valor devuelto == False:
   print("ha habido un error")

Pero creo que ese no es el concepto de excepción no?

jesustorresdev commented 5 years ago
  1. ce dos clases, BlockBuilder para formatear los mensajes de slack y OpenBadges para convertir entidades en los objetos de openbadges. Esto serían adaptadores o servicios? Son clases que están pensadas para ser usadas por otra cosa, no tienen funcionalidad por si solas y no dependen de nadie. Puse las dos en adaptadores pero me pegan más como servicios.

Lo servicios son el que se usa para hablar con slack y el que se usa para hablar con OpenBadges. Si has creado clases auxiliares para preparar datos, formatear y esas cosillas, son las típicas utilidades.

Puedes tener una carpeta utils con módulos dentro de utilidad.

yo los estoy usando para detectar errores porque me parece más comodo encerrarlo todo en un try ... except y luego cuando escribo el método sólo lanzo una excepción y no necesito acordarme de escribir cosas como:

if valor devuelto == False:
   print("ha habido un error")

Pero creo que ese no es el concepto de excepción no?

Eso dependen del lenguaje. Es verdad que en Java, C++, C# las excepciones son para errores excepcionales: quedarte sin memoria y cosas así.

Pero en Python es una convención usar las excepciones para notificar errores. Vamos que las funciones devuelven el resultado y si no puede dar el resultado es muy típico lanzar una excepción con el motivo del error.

En Python está bien.