Repaso
English

¿Qué línea viola la Law of Demeter ('habla solo con tus amigos inmediatos')?

Opciones

  1. total = order.total() + shipping
  2. order.customer.address.city.upper() (Opción correcta)
  3. self.repo.save(order, commit=True)
  4. count = len(items) + len(extra)

Respuesta

order.customer.address.city.upper()

Por qué

La Law of Demeter dice que un método debe hablar con sus colaboradores directos, no meterse a través de ellos en sus partes internas.

order.customer.address.city significa que tu código sabe cómo están construidos por dentro Order, Customer y Address. Si alguno cambia, tu código se rompe.

Mejor: pide lo que necesitas al objeto más cercano, por ejemplo order.shipping_city().

Recuerda

Evita cadenas largas de puntos hacia las partes internas de otros objetos.

Términos clave

Practica esta pregunta en Repaso