Prática recomendada do CodeIgniter - vários modelos
-
24-09-2019 - |
Pergunta
Apenas uma pergunta rápida sobre as melhores práticas no desenvolvimento do MVC.
Digamos que eu tenho dois controladores (cont1, cont2), cada um dos quais usa um modelo separado, Model1 e Model2.
Todos os arquivos são complexos, os modelos contêm dezenas de métodos.
Digamos, terminei de desenvolver o primeiro controlador e estou no meio do trabalho no segundo. Preciso criar um método no Model2, que será exatamente o mesmo que um dos métodos no Model1. É apenas um método minúsculo, obtendo, por exemplo, uma lista de categorias de algum tipo.
Qual é a melhor abordagem do trabalho - devo duplicar o método e incluí -lo no meu Model2, ou devo recuperá -lo do Model1?
A coisa razoável a fazer seria obtê -lo do Model1, mas não sei se isso afetaria o tempo de execução, pois teria que carregar os dois modelos.
Eu ficaria grato por algum feedback
Obrigado k
Solução
Carregar um segundo modelo não terá um impacto perceptível no tempo de execução. Este é provavelmente o caminho a percorrer.
Além disso, cada modelo deve encapsular a lógica de dados para um 'objeto' específico. Você pode pensar em cada modelo quase como uma tabela de banco de dados. Portanto, você provavelmente não deseja ter o mesmo método em dois lugares diferentes - e, se o fizer, considere criar um plug -in.
Outras dicas
Talvez o que você realmente precisa seja um terceiro modelo. Se você tem um método que está sendo usado em muitos/todos os seus modelos, pode realmente ser um conjunto de dados exclusivo que justificaria sua própria atenção. Além disso, você evitará carregar vários modelos "grandes" e, em vez disso, terá 1 modelo grande e 1 minúsculo.
Eu encontrei a mesma situação. O que eu faço é carregar o objeto Codeigniter por referência em todo modelo. Depois, posso carregar outros modelos, bibliotecas, ajudantes e até configurar itens nos meus modelos. Ajuda a manter o código do modelo fora do controlador e eu consideraria uma prática recomendada. Sempre mantenha -o seco (não se repita).