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!
- Guest checkout bloqueado na API REST do Magento 2? Confira isso. - 7 de julho de 2026
- Você precisa testar esta plataforma de e-commerce - 9 de fevereiro de 2026
- A hora de montar o seu OnlyFans chegou! Veja 8 ideias pra começar o seu. - 4 de dezembro de 2024
Deixe seu comentário
[fbcomments url="https://www.magenteiro.com/blog/magento-1/desenvolvimento/backend/quando-usar-getsingleton-e-getmodel/"]