Antes de comercarmos a trabalhar com o MIOLO vamos entender que ele e...O MIOLO e um framework para criacao de sistemas de informacao acessiveis via WEB, baseado na linguagem PHP5, scripts javascript e conceitos de POO (Programacao Orientada a Objetos), gerando paginas HTML.Lembrando que um framework e um conjunto de classes cooperantes que constroem um projeto reutilizavel para uma classe especifica de software. O framework dita a arquitetura da aplicacao. A aplicacao e construida criando subclasses das classes do framework. HistoricoComecou a ser desenvolvido em 2001 pela Univates/RS (Unidade Integrada Vale do Taquari de Ensino Superior).Desde de 2004 esta sob a responsabilidade da Solis, uma Cooperativa de Solucoes Livres.Em 2003, a UFJF(Universidade Federal de Juiz de Fora) passou a utilizar o Miolo para desenvolver suas aplicacoes corporativas.Esta na versao 2.5 (disponibilizada em 2008).O Framework Miolo pode ser obtido gratuitamente em: http://www.solis.org.br/downloads/mioloInformacoes retiradas de manuais disponibilizadas pela Solis e materiais disponibilizados na web por Ely Edison Matos (adaptados). Vamos agora fazer as classes do dominio. Elas implementam as regras de negocio e encapsulam o acesso a base de dados. As regras de negocio sao implementadas atraves dos metodos do objeto, geralmente atraves da interacao com outros objetos. O acesso a base de dados pode ser feito atraves da camada DAO do Miolo (atraves das classes MDatabase, MSQL, MQuery entre outras) ou atraves da camada de persistencia de objetos. Todas as classes de dominio herdam de MBusiness e sao persistentes. As definicoes de classes ficam no diretorio equipamento/classes. Os mapas XML usados pela camada de persistencia ficam em equipamento/classes/map.O codigo 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 codigo a seguir mostra a definicao 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 diferentesclass BusinessEquipamentoCategoria extends MBusiness{// atributospublic $idCategoria;public $nome;public $materiais;// metodo construtor // No Miolo as classes sao instanciadas atraves// 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' e o nome da // configuracao do banco de dados// definida no arquivo miolo.confparent::__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, ja com os atributos preenchidosfunction getById($id){$this->idCategoria = $id;$this->retrieve();return $this;}// exemplos de metodos setter/getterfunction setNome($nome){$this->nome = $nome;}function getNome(){return $this->nome;}// recebe um "transfer object" e preenche os atributosfunction setData($data){$this->idCategoria = $data->idCategoria;$this->nome = $data->nome;}// recupera os registros no banco de dados e retorna um objeto MQueryfunction listAll(){$criteria = $this->getCriteria();$criteria->addOrderAttribute('nome');return $criteria->retrieveAsQuery();}// recupera os registros no banco de dados segundo um criterio// e retorna um objeto MQueryfunction 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