When the developers are extending the portal, they should try to avoid implementing directly the portal's interfaces. The best practice is to extend the base implementation from the portal, we usually have that.
The reason is that in some cases, we need to add new methods to the interfaces in fix packs to fix an issue completely (e.g. adding a new method to a service). If the user implements the API directly, the patch would break the customization. If the basic implementation is extended, the change won't be noticed as we would add the new methods to the basic impl.