Estou atendendo um cliente que utiliza este módulo de subscription da vindi para magento 1.
O cenário é o seguinte, o cliente possui uma regra de negócio específica que precisa realizar um override na seguinte class e method:
class > app/code/community/Vindi/Subscription/Model/Observer.php
method > validateAdminHtmlOrder
Ou seja:
class Cliente_VindiSubscription_Model_Observer extends Vindi_Subscription_Model_Observer
method validateAdminHtmlOrder chama o method $this->countSubscriptions($quote) que chama $this->isSubscription($product) que possuem visibilidade private, o que gera erro, pois uma class inherited não consegue chamar método private do pai, somente se for protected.
Ou seja,
Tenho que alterar também a visibilidade do method countSubscriptions e isSubscription de private para protected somente para não gerar o erro.
Deparamos com o seguinte dilema, qual é a melhor prática method private ou protected?
Este módulo de subscription da vindi para magento 1 atende muitos clientes, todo desenvolvimento do módulo é para atender uma loja default magento, propósito geral, sem regras de negócios do cliente envolvidas com o módulo, porém meu cenário mostra que clientes podem adicionar novas regras de negócio ao módulo, neste caso eu recomendo manter as variáveis e métodos ao invés de private como protected, uma vez que é um repositório público e possibilite o cliente customizar regra de negócios sobre o módulo sem causar problemas com visilidade de variáveis e métodos como private.
Espero ter sido claro com a minha explanação, podemos discutir melhor nos comentários do pull request.
Solução Proposta
Alteração da visibilidade das variáveis e métodos de private para protected
@lfluvisotto muito obrigado pela sugestão :smiley: :tada:
Estamos analisando as implementações e o quanto antes possível estaremos retornando :handshake:
Motivação
Segue meus apontamentos:
Estou atendendo um cliente que utiliza este módulo de subscription da vindi para magento 1.
O cenário é o seguinte, o cliente possui uma regra de negócio específica que precisa realizar um override na seguinte class e method:
class > app/code/community/Vindi/Subscription/Model/Observer.php
method > validateAdminHtmlOrder
Ou seja:
class Cliente_VindiSubscription_Model_Observer extends Vindi_Subscription_Model_Observer
method validateAdminHtmlOrder chama o method $this->countSubscriptions($quote) que chama $this->isSubscription($product) que possuem visibilidade private, o que gera erro, pois uma class inherited não consegue chamar método private do pai, somente se for protected.
Ou seja,
Tenho que alterar também a visibilidade do method countSubscriptions e isSubscription de private para protected somente para não gerar o erro.
Deparamos com o seguinte dilema, qual é a melhor prática method private ou protected?
Este artigo http://carlosschults.net/en/are-private-methods-a-code-smell/ segue meu pensamento sobre o assunto.
Minha conclusão é a seguinte:
Este módulo de subscription da vindi para magento 1 atende muitos clientes, todo desenvolvimento do módulo é para atender uma loja default magento, propósito geral, sem regras de negócios do cliente envolvidas com o módulo, porém meu cenário mostra que clientes podem adicionar novas regras de negócio ao módulo, neste caso eu recomendo manter as variáveis e métodos ao invés de private como protected, uma vez que é um repositório público e possibilite o cliente customizar regra de negócios sobre o módulo sem causar problemas com visilidade de variáveis e métodos como private.
Espero ter sido claro com a minha explanação, podemos discutir melhor nos comentários do pull request.
Solução Proposta
Alteração da visibilidade das variáveis e métodos de private para protected