Todas as classes de domínio herdam de MBusiness e são persistentes.
As definições de classes ficam no diretório equipamento/classes.
Os mapas XML usados pela camada de persistência ficam em equipamento/classes/map.
O código a seguir mostra o mapeamento XML - Categoria.
/equipamento/classes/map/categoria.xml
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> <map> <moduleName>equipamento</moduleName> <className>categoria</className> <tableName>categoria</tableName> <databaseName>equipamento</databaseName> <attribute> <attributeName>idcategoria</attributeName> <columnName>idcategoria</columnName> <key>primary</key> <idgenerator>seq_categoria</idgenerator> </attribute> <attribute> <attributeName>nome</attributeName> <columnName>nome</columnName> </attribute> <attribute> <attributeName>categoria</attributeName> </attribute> <association> <toClassModule>equipamento</toClassModule> <toClassName>categoria</toClassName> <cardinality>oneToMany</cardinality> <target>material</target> <retrieveAutomatic>false</retrieveAutomatic> <saveAutomatic>false</saveAutomatic> <entry> <fromAttribute>idcategoria</fromAttribute> <toAttribute>idcategoria</toAttribute> </entry> </association> </map>
O código a seguir mostra a definição da classe Categoria
/equipamento/classes/categoria.class
<?php // As classes de dominio herdam de MBusiness e sao persistentes // O nome da classe de dominio segue o padrao Business// para permitir que classes com o mesmo nome sejam usadas em modulos diferentes class BusinessEquipamentoCategoria extends MBusiness { // atributos public $idCategoria; public $nome; public $materiais; // método construtor // No Miolo as classes sao instanciadas através // de $MIOLO->getBusiness(modulo,classe,parametro) // se o parametro for um objeto, o construtor chama o metodo setData(parametero) // se o parametro for um valor, o construtor chama o metodo getById(parametro) function __construct($data=NULL) { // executa o construtor da classe pai; 'equipamento' é o nome da // configuracao do banco de dados // definida no arquivo miolo.conf parent::__construct('equipamento',$data); // equipamento de inicializacao de um atributo $this->nome = ''; } // acessa o banco de dados para recuperar o objeto com id fornecido // e retorna o proprio objeto, já com os atributos preenchidos function getById($id) { $this->idCategoria = $id; $this->retrieve(); return $this; } // exemplos de metodos setter/getter function setNome($nome) { $this->nome = $nome; } function getNome() { return $this->nome; } // recebe um "transfer object" e preenche os atributos function setData($data) { $this->idCategoria = $data->idCategoria; $this->nome = $data->nome; } // recupera os registros no banco de dados e retorna um objeto MQuery function listAll() { $criteria = $this->getCriteria(); $criteria->addOrderAttribute('nome'); return $criteria->retrieveAsQuery(); } // recupera os registros no banco de dados segundo um criterio // e retorna um objeto MQuery function listByNome($nome) { $criteria = $this->getCriteria(); $criteria->addCriteria('nome','LIKE', "$nome"); $criteria->addOrderAttribute('nome'); return $criteria->retrieveAsQuery(); } // recupera um array de os objetos "material" associados a este curso // e preeche o atributo $materiais com este array function getMatriculados() { $this->retrieveAssociation('materiais'); } } ?>
O código a seguir mostra o mapeamento XML - Material.
/equipamento/classes/map/material.xml
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> <map> <moduleName>equipamento</moduleName> <className>material</className> <tableName>material</tableName> <databaseName>equipamento</databaseName> <attribute> <attributeName>idmaterial</attributeName> <columnName>idmaterial</columnName> <key>primary</key> <idgenerator>seq_material</idgenerator> </attribute> <attribute> <attributeName>nome</attributeName> <columnName>nome</columnName> </attribute> <attribute> <attributeName>marca</attributeName> <columnName>marca</columnName> </attribute> <attribute> <attributeName>preco</attributeName> <columnName>preco</columnName> </attribute> <attribute> <attributeName>idcategoria</attributeName> <columnName>idcategoria</columnName> </attribute> <attribute> <attributeName>categoria</attributeName> </attribute> <association> <toClassModule>equipamento</toClassModule> <toClassName>material</toClassName> <cardinality>oneToOne</cardinality> <target>material</target> <retrieveAutomatic>false</retrieveAutomatic> <saveAutomatic>false</saveAutomatic> <entry> <fromAttribute>idcategoria</fromAttribute> <toAttribute>idcategoria</toAttribute> </entry> </association> </map>
O código a seguir mostra a definição da classe Material
/equipamento/classes/material.class
<?php
class BusinessEquipamentoMaterial extends MBusiness
{
var $idMaterial;
var $nome;
var $marca;
var $preco;
var $idCategoria;
var $categoria;
function __construct($data=NULL)
{
parent::__construct('equipamento',$data);
$this->nome = '';
$this->marca = '';
$this->preco = '';
$this->idCategoria = ':null';
}
function getById($id)
{
$this->idMaterial = $id;
$this->retrieve();
return $this;
}
function setIdMaterial($idMaterial)
{
$this->idMaterial = $idMaterial;
}
function getIdMaterial()
{
return $this->idMaterial;
}
function setNome($nome)
{
$this->nome = $nome;
}
function getNome()
{
return $this->nome;
}
function setPreco($preco)
{
$this->preco = $preco;
}
function getPreco()
{
return $this->preco;
}
function setMarca($marca)
{
$this->marca = $marca;
}
function getMarca()
{
return $this->marca;
}
function setData($data)
{
$this->setIdMaterial($data->idMaterial);
$this->setNome($data->nome);
$this->setPreco($data->preco);
$this->setMarca($data->marca);
}
function listByNome($nome)
{
$criteria = $this->getCriteria();
$criteria->addCriteria('nome','LIKE', "$nome");
$criteria->addOrderAttribute('nome');
return $criteria->retrieveAsQuery();
}
function cadastrar($categoria)
{
}
}
?>
Olá,
ResponderExcluirParabéns pelo material.
Uma dúvida!
Existe alguma IDE para facilitar a vida do desenvolvedor para aumentar sua produtividade?
Algo com syntax highlighting, suporte a code completion, wizards para geração automática de classes e xml.
Percebi que na ausência de uma ferramenta que auxilie o desenvolvedor, acaba sendo um grande desafio fazer tudo isso na "unha".
Como vocês fazem para contornar esse problema?
Att
Fabiano Fernandes
Olá Fabiano,
ResponderExcluirFicamos felizes que você tenha gostado do material.
Não utilizamos nenhum IDE especifica para Miolo, usamos o Eclipse. Ouvimos falar que existe uma chamada MioloIDE mas não chegamos a testa-la.
Trabalhamos com o Eclipse com a perspectiva em PHP.
Em breve iremos publicar novos posts sobre o Miolo e sobre PHP.
Até logo,
Núcleo de Pesquisa e Desenvolvimento - IFSP-BRAG