What's the difference between MonoBehavior OnMouseDrag and IDragHandler OnDrag

What’s the difference between MonoBehavior OnMouseDrag and IDragHandler OnDrag, and what is the reason to choose one over the other?

Also, the same for all similar situations such as IPointerEnterHandler.OnPointerEnter and MonoBehaviour.OnMouseEnter.

I see that the handlers receive eventData. Are there any other reasons to implement the handlers?

The handlers are apparently more efficient on mobile platforms, so they are nice if you are targeting mobile or just want to make your game easily cross-platform.

However, they do require using the UI EventSystem and GraphicsRaycaster, together with an Image or other raycast target.