A blog about data, information and IT, by Mario Alberich

Nov 27
2013

Magento: métodos factoría para modelos

Magento incluye la clase final Mage (definida en app/Mage.php) que actúa como factoría para recuperar e instanciar clases de diversos tipos, acceder al registro de singletons, entre otras muchas funciones básicas. El patrón factory centraliza la implementación de esta lógica en los métodos de una sola clase, por lo que simplifica una serie de tareas

Para el caso de los modelos, tenemos los siguientes métodos:

Mage::getModel

Mage::getModel($modelClass, $arguments = array());

Mage::getSingleton

Mage::getSingleton($className);

Este método instancia una clase y la guarda en el registro interno, o bien recupera el objeto almacenado anteriormente. Esta clase se instancia en Magento y se almacena internamente en el registro (Mage::registry).

Así, el método getSingleton hace las mismas funciones que un getModel, pero sobre un objeto almacenado internamente. El patrón Registry es digno de mención aparte, ya que permite almacenar variables sobre claves únicas, simulando el funcionamento de las variables globales pero sin sus inconvenientes. Entonces, utilizando este patrón:

  • Es posible recuperar el objeto con Mage::registry($className),
  • Almacenar instancias de cada clase con Mage::register($className)
  • Eliminarlas del registro con Mage::unregister($className).


Por otro lado, Mage::getResourceSingleton($className) proporciona el singleton de un recurso del modelo.

Models y Resources


Los métodos getResource*  y get*Instance son una capa más dentro de la arquitectura de Magento. Aunque a nivel práctico (usar Magento con lo que viene de serie) estas diferencias deberían pasar desapercibidas en tu día a día, ya que principalmente usarás el metodo Mage::getModel y sus análogos para helpers y controladores.

En cualquier caso, puedes leer diferencias entre Model y ResourceModel en la respuesta a esta pregunta de stackoverflow.

Los ResourceModels se utilizan para poder integrar el acceso a datos que no siempre están en el mismo sistema de almacenamiento. Esto permite definir y utilizar los modelos EAV, o bien definir tablas de la base de datos utilizando modelos a alto nivel, pero diferentes ResourceModels por debajo de ellos.

Tags

gestión documental 10     Recuperación información 11     Linux 7     Usabilidad 5     open source 3     Tagging 12     lógica borrosa 2     fuentes de información 12     Google 6     off-topic 6     spam 2     grafos 6     Web social 11     modelización 12     Productividad 11     buscadores 2     utilidades 17     Profesionales 9     SEO 5     estándares 3     veracidad 3     relevancia 2     lingüística 2     PLN 2     lenguajes documentales 2     apis-mashups 3     reseñas 7     Flash 7     Gráficos estadísticos 13     Publicidad 3     Innovación 5     muestreo estadístico 9     PHP 14     internet 2     testeo 12     desarrollo 3     visualizacion 36     javascript 16     datos abiertos 9     elecciones 2     simulación 5     html5 7     phing 9     ssh 2     seguridad 3     indicadores 2     demografía 3     media 2     algoritmos 7     shell 4     mysql 2     backup 2     big data 6     twitter 2     d3js 11     revealjs 2     metodología 6     data-journalism 6     smartcities 2     NYT 2     privacidad 3     benchmarking 4     recopilaciones 21     magento 5     formacion 2     github 2     HHVM 3     psicología 2     angularjs 3     grep 2     nodejs 5     promises 2     mapreduce 3     crossfilter 2     exploración de datos 2     machine learning 2    

© 2007 and beyond Mario Alberich, licensed under CC-BY-SA unless stated otherwise.