Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Daniel Pereira_37985

Implementação de rotina

Recommended Posts

Olá!

 

Seguinte, estou com uma dúvida para implementar uma espécie de rotina no meu sistema. É um sistema administrativo para gerenciar pedidos. Essa rotina será executada sempre que o status de um período for alterado, nesse caso a rotina verificará o tipo de status e executará uma determinada ação pra ele.

 

Qual é a melhor forma de implantar essa rotina uma vez que ela pode também ser chamada em outras partes (controller/action) do sistema? Crio uma classe, um plugin, um model?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie um método no Model de Pedidos que altera o Status. Neste método você coloca esta rotina. Em qualquer parte do seu sistema que você precisar alterar o status de um pedido, você chama este método, que recebe um pedido como parâmetro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se o model é um bom lugar pra ela, porque nessa rotina eu chamo outras libraries para formatação de string, locale, além de uma library que eu criei para fazer envio de e-mail utilizando um template, sem contar que ela precisa acessar outros models para trazer as informações que eu preciso, não é somente o model do pedido que eu vou utilizar.



Eu estava pensando em, por exemplo, criar uma "trigger" no update do pedido, sobrescrevendo o método update dele. Assim, sempre que houver uma atualização do pedido eu chamado minha "rotina" que vai verificar qual é o status do pedido, resgatar as informações que preciso, tratar os dados, carregar as variáveis no o e-mail template e fazer o envio.

 

Não sei se essa é a melhor forma, fazendo uma chamada do model e criando uma library para tratar regras de negócio.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu entendo que a forma mais adequada é como eu citei mesmo. Se você criar uma "trigger", você teria que verificar se o status foi alterado em todas as alterações do seu pedido. Se eu entendi, o que você queria fazer era algo assim:

 

 

 

public update(Pedido $pedido) {

     if(logica para identificar se mudou o status) {

            // executa tudo que vc colocou ali

     }
     // altera o pedido
}

 

Da forma que eu sugeri, ficaria mais ou menos assim:

 

 

 

public updateStatus (Pedido $pedido) {

     // executa tudo que vc colocou ali
    $this->update($pedido);
}

public update(Pedido $pedido) {
     // altera o pedido
}

 

 

Não sei se essa é a melhor forma, fazendo uma chamada do model e criando uma library para tratar regras de negócio.

Regra de negócio deve ser tratada no Model.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com relação a "instanciar" outras classes dentro do model também não haveria problema?

 

É que na verdade, o que estou fazendo é uma manutenção em um sistema, se fosse para fazer do "zero" talvez ficasse mais fácil. Não posso altera a forma como que é alterado o status do pedido, tenho que chamar nesse mesmo processo, logo após o update do pedido com seu novo status, a rotina para verificar o tipo de alteração e enviar o e-mail.



Nesse sistema não utiliza-se Models propriamente ditas, só DbTables com queries apenas. As regras de negócio são tratadas nos controllers. Não estou a julgar o sistema, só que não fui eu que o fiz, apenas tenho que implementar essa funcionalidade. Hoje a rotina está dentro do próprio controller, mas queria deixar ela desacoplada porque vou precisar utilizá-la em outras áreas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com relação a "instanciar" outras classes dentro do model também não haveria problema?

Quando é ruim instanciar no Model, é ruim instanciar em qualquer outra classe/camada. Sobre esta questão, leia um pouco sobre inversão de controle ou injeção de dependência.

 

Fazer na forma de trigger como você disse também é uma opção. Não acho muito correto, mas também resolve o seu problema. A grande dificuldade vai ser identificar se houve a alteração no status do pedido. Fora isto, não vejo maiores dificuldades.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pelos conselhos, Matias. Já trabalho há alguns anos com programação mas de uns tempos pra cá que comecei a me preocupar mais com "programar bem", ou seja, tentar utilizar padrões e melhores práticas, com Zend mesmo faz só 4 meses que estou trabalhando. Já havia estudado sobre inversão de controle / injeção de dependência, vou dar mais uma lida para relembrar.

 

Queria encontrar um material de Zend que mostrasse boas práticas de desenvolvimento, quando e como utilizar o model, libraries, etc. Na internet você acha muitos "cruds" mas nada que tenha um aprofundamento maior.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boas práticas independem de framework ou de linguagem. Para trabalhar com o Zend 1.x, é necessário você entender sobre MVC (model, view, controller), utilizado pelo Zend, mas que não é exclusivo dele.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou dar uma estudada mais a fundo no MVC. Por hora, você saberia me informar sobre algum material, livro ou curso sobre Zend Framework de forma aprofundada, avançada, com exemplos reais, etc.?

 

Daniel, os cursos do school of net são muito bons

 

De uma olhada depois

 

http://www.schoolofnet.com

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já fiz sim...

Vale a pena o investimento. Pelo menos na minha opiniao dou nota 10. Acredito que você não vai se arrepender

 

Comprei um workshop deles, realmente é muito bom, a didática é impressionante. Pretendo comprar outros cursos assim que sobrar mais uma grana. Mas vale o investimento mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.