Quando usar getSingleton e getModel?
Backend, Desenvolvimento, Magento 1
Atualizado em 16 de fevereiro de 2022
Uma dúvida muito comum quando estamos iniciando no desenvolvimento para Magento (1) é porque em alguns lugares do Magento um model é chamado usando o método Mage::getModel
e em outros Mage::getSingleton
.
A explicação no entanto é bastante simples, mas para ficar ainda mais óbvio, vamos entender o que é Singleton.
O que é Singleton?
Por definição (entenda Wikipedia), singleton é um pattern/padrão de desenvolvimento que restringe a inicialização de uma classe a um único objeto.
Em outras palavras inicializarmos determinada classe pela segunda vez, ao invés de termos um segundo objeto teremos a classe anterior reaproveitada.
E o Mage::getSingleton?
No Magento não é diferente. Quando chamamos Mage::getSingleton
, vamos ter como retorno a instância de um Model, da mesma forma que teríamos com Mage::getModel
, porém se o Model já tiver sido instanciado anteriormente, a mesma classe será aproveitada. Caso contrário, será iniciada e salva em memória(na classe Mage) como podemos concluir abaixo:#
# Arquivo: app/Mage.php /** * Retrieve model object singleton * * @param string $modelClass * @param array $arguments * @return Mage_Core_Model_Abstract */ public static function getSingleton($modelClass='', array $arguments=array()) { $registryKey = '_singleton/'.$modelClass; if (!self::registry($registryKey)) { self::register($registryKey, self::getModel($modelClass, $arguments)); } return self::registry($registryKey); }
Isso é útil em várias situações, em especial quando temos certeza que queremos lidar sempre com a mesma instância de um Model sem iniciar diversas vezes a mesma classe em uma mesma requisição.
A essa altura você já deve ter tido aquele momento “a-há!” e percebido que a maioria das vezes que queremos buscar ou iniciar algo na session do Magento vemos getSingleton
ao invés de getModel
, não é mesmo?
Inclusive, se fizer uma busca com a expressão regular getModel\(.*session.*\)
em todo o Magento, encontrará pouquíssimas ocorrências. Isso porque a sessions são um ótimo exemplo de classes que não deveriam ser re-instanciadas.
Como podemos concluir, singletons são muito úteis nos casos onde não precisamos criar uma nova instância de classe, ou reaproveitar um objeto criado.
Já os Models… bom, é o oposto. Mas você vai ver muito sobre eles no curso de desenvolvimento de módulos para Magento que vêm por aí. 😉
Para ficar por dentro, é só colocar seu e-mail na caixa aqui da lateral >>
Gostou?
Compartilhe! Deixe seus comentários!
- PagSeguro (PagBank) para Magento 1 recebe a Nova Geração - 9 de abril de 2024
- Recorrência no WooCommerce Sem Plugins Pagos - 28 de janeiro de 2024
- Chargeback. O que é, e como se livrar deles. - 19 de dezembro de 2023
Deixe seu comentário
[fbcomments url="https://www.magenteiro.com/blog/magento-1/desenvolvimento/backend/quando-usar-getsingleton-e-getmodel/"]