If functionality is implemented as a separate class, it would be convenient to have access to the BaseAsset getInterface<T>() method. Currently getInterface<T>() is a protected method., making it internal or even public might be better.