Over the years, the back-end logic of AEM components moved from JSPs to the WCMUse class, then to WCMUsePojo, and then to Sling Models.
AEM 6.1 and 6.2 supported the WCMUsePojo class; AEM 6.2 and 6.3 started supporting Sling Models. Both are used from HTL through the data-sly-use block statement.
Before comparing them, let us go through the concepts.
What is a POJO (Plain Old Java Object)?
POJOs are simple Java classes that do not depend on other libraries, interfaces or annotations, which makes them easier to reuse across project types. A POJO exposes getter and setter methods, so the underlying data type can change without breaking the class's public interface. That makes it more robust and resilient to change.
What if there are no getters and setters?
Without getters and setters, anyone can access a variable directly, which affects the code and can lead to security issues. A POJO forces other developers to go through its methods instead of touching instance variables directly.
What are Sling Models?
Sling Models are annotation-driven POJOs. They map resource properties, assign default values, inject OSGi services and much more.
They are pure POJOs that give a clean separation between logic and presentation, and they can be extended with custom injectors and annotations. Sling Models map Java objects to Sling resources.
Use-API vs Sling Models
Use-API
HTL (formerly Sightly) supports business logic objects in two ways:
- the Java Use-API, through POJOs
- the JavaScript Use-API
POJOs that extend WCMUsePojo implement the Use interface and are initialized with the scripting bindings, which provides convenience methods for commonly used objects such as the request, resource, properties and page.
Sling's HTL implementation provides basic POJO support through the org.apache.sling.scripting.sightly.pojo.Use interface and the JavaUseProvider, while the JavaScript use function is implemented by the org.apache.sling.scripting.sightly.js.provider bundle. The Sling implementation also adds a few extensions to the Use-API.
Sling Models
Sling Models are more flexible and can also be used outside HTL, which makes the business logic more reusable. They are managed by Sling, and references to other objects are injected with annotations and reflection.

Converting WCMUsePojo to a Sling Model
Remove extends WCMUsePojo, add the Sling Model annotation on top of the class, then add injected fields for the references the class needs. That is all it takes to convert a WCMUsePojo into a Sling Model.
Conclusion
For AEM 6.3, AEM 6.4 and the AEM Core WCM Components, Adobe recommends Sling Models as the best practice. The Apache Sling documentation on HTL scripting covers the details, including a section on picking the best Use provider for a project.
Related: the HTL Use-API and modern AEM component implementation patterns.