Nesta seção você irá conhecer mais uma das três camadas do padrão MVC.
Os models, comumente chamados de modelos, são responsáveis por todos os processos relacionados à dados. Ou seja, o processo de leitura, escrita e validação de dados é realizado nesta camada. Estas rotinas são chamadas de regras de negócio.
O modelo acessa qualquer tipo de informação, isto é, desde um banco de dados até um arquivo XML. As informações obtidas no modelo são repassadas para o controlador que, mediante a necessidade, repassa para a visualização. Em outro caminho existe o envio de informações da visualização para o controlador; que, por sua vez, envia para o modelo, e; este consuma o processo realizando as devidas alterações nos dados.
Agora que você já sabe o que é um model, deve se atentar para os detalhes na criação do mesmo. Quando um model é criado com o objetivo de manipular uma tabela do banco de dados é mais do que recomendado que este seja desenvolvido nos padrões do ORM vigente do framework (vide mais detalhes abaixo).
Para aproveitar dos benefícios do ORM é necessário que o model herde as configurações dele e, para tal, é necessário que o seu model seja uma extensão da classe mestre \HXPHP\System\Model
.
O código base de um model é:
class NomeDoModel extends \HXPHP\System\Model
{
...
}
As convenções da nomenclatura dos models são ditas pelo ORM vigente, portanto estas serão abordadas em uma seção específica.
ORM, da sigla Object-relational mapping, tem a seguinte definição de acordo com a Wikipedia:
"Mapeamento objeto-relacional (ou ORM, do inglês: Object-relational mapping) é uma técnica de desenvolvimento utilizada para reduzir a impedância da programação orientada aos objetos utilizando bancos de dados relacionais. As tabelas do banco de dados são representadas através de classes e os registros de cada tabela são representados como instâncias das classes correspondentes.
Com esta técnica, o programador não precisa se preocupar com os comandos em linguagem SQL; ele irá usar uma interface de programação simples que faz todo o trabalho de persistência.
Não é necessária uma correspondência direta entre as tabelas de dados e as classes do programa. A relação entre as tabelas onde originam os dados e o objecto que os disponibiliza é configurada pelo programador, isolando o código do programa das alterações à organização dos dados nas tabelas do banco de dados."
Em outras palavras, com o uso de um ORM torna-se pouco provável o uso de comandos SQL nos códigos.
A lógica é a seguinte: para cada tabela tem-se um model; sendo que cada model é um objeto, e; o model é uma extensão da classe mestre do ORM.
O ORM nativo do HXPHP Framework é o PHP ActiveRecord, que é uma biblioteca open source desenvolvida nos padrões ActiveRecord. Trata-se de uma ferramenta de simples instalação e com uma sintaxe fácil, ou seja, além de ser fácil a sua implementação, o mesmo ainda conta com um nível mais do que considerável de legibilidade até mesmo para quem nunca ouviu falar deste ORM, pois, somente pelos métodos, nomeados de forma sugestiva, já é possível compreender o funcionamento. De toda forma, é recomendado que você leia a documentação oficial para compreender todos os recursos e possibilidades.
A questão fundamental no uso deste ORM está nas convenções de nomenclatura das tabelas do banco de dados e dos models. Confira a lista das 5 principais:
- Todas as tabelas devem ser nomeadas em INGLÊS;
- O nome do model é o singular do nome da tabela;
- O nome do model deverá ser escrito no padrão CamelCase;
- A chave primária deve ser 'id' e NÃO 'ID' ou 'Id', e;
- {Tabela} login_attempts => {Model} LoginAttempt / lost_passwords => LostPassword.
class Product extends \HXPHP\System\Model
{
static function exists($product_code)
{
$product = self::find_by_code($product_code);
return !is_null($product) ? true : false;
}
}