Concepto del Data interfaces en Magento 2
Una tabla tiene campos. Esos campos son descritos por un modelo de datos que implementa un data interface. En el data interface, se definen los getters y setters relacionados con los campos de la entidad( entidad === tabla). Los data interfaces se encuentran en la carpeta Api/Data. Y los data models están en la carpeta Model/Data.
Estos interfaces son relacionados con el data model mediante el tag preference del di.xml. Así si un módulo de terceros quiere customizar datos del modelo, sólo tendrá que usar el preference, mapeando el interface con la clase data model que ha creado.
Mi conclusión final es que esto de los interfaces tienen el objetivo de que el módulo pueda ser modificado fácilmente por otros módulos manteniendo la integridad de los datos de la entidad. O sea si quieres un código bien hecho, es decir que sea fácil de reescribir por los módulos de terceros y mantener la integridad de los datos, usar el patrón service contract para las entidades. Si quieres algo rápido, saltarse de este patrón.
Nota: *** Puede haber problemas en el export de los datos en formato csv o excel, si el valor del campo es null y el valor no es required. Para solucionarlo se debe poner lo siguiente en el datamodel. Esto se debe a la siguiente validación del fichero DataObjectProcessor.
if($value === null) && !$isMethodReturnValueRequired){ continue; }O sea si el valor del campo es null, salta al siguiente elemento del arreglo. Y este campo(de la tabla) queda excluido del arreglo custom_attributes por consiguiente en el export va a dar un error tal como getValue from null. Entonces para resolver este problema usamos la siguiente condición para que no dé null.
public function getEjemplo() { return $this->getData(self::EJEMPLO) === null ? '' : $this->getData(self::EJEMPLO); }