Esse nome Renato Silva me dá medo, é o nome do pior zagueiro do meu time,
que cisma em achar que é craque hahaha brincadeiras a parte, vamos voltar ao
escopo do assunto.

Então, não tem mapeamento, pq infelizmente o CI ainda não tem esse recurso,
o que torna nesse ponto o Kohana infinitamente melhor. Eu, assim como você,
concordo que o CI não orienta ao programador programar pensando em OO, o que
ele faz é fazer você seguir um padrão de desenvolvimento, o que diga-se de
passagem, já ajuda bastante. Mas quando você tem um aplicação maior, você
tem a necessidade de começar a pensar em classes de domínio.

Para esse meu caso, eu fiz uma coisa muito parecida ao que é muito usado no
Java. Tenho meus modelos, que são nada mais do que POJO's (do java) ou
entidades, as minhas classes de acesso aos dados que são os DAO's, onde cada
DAO equivale a uma entidade, e os serviços, que fazem o trabalho sujo, onde
por exemplo pegar as N matérias (uma entidade) de um determinado aluno
(outra entidade). Deu para dar uma clareada aí nas idéias?

Se ficou muito confuso, me avisa, que eu tento mostrar isso de outro jeito.

Infelizmente, ou, felizmente, como o PHP não é uma liguagem 100% OO, então é
difícil você achar sistemas assim, e pessoas pensando desse jeito. Mas tudo
depende de você, já que a linguagem em si oferece o suporte necessário a
você desenvolver aplicações OO.

Esses dia na php-especialistas, que é uma das melhores listas de PHP em
português, eu vi uma pergunta sobre OO que rendeu ... onde quase todo mundo
se equivocou, pq as pessoas pensam em OO como funcionalidade, e não como
conceito, aí que na minha humilde opnião que está o erro.

Abraço,

Marcus




2008/6/4 Renato Silva <[EMAIL PROTECTED]>:

> Olá Marcus, aproveitando, você tem um domain model aí?
>
> Você faz algum tipo de mapeamento O/R? Como você faz por exemplo para obter
> todos os pedidos de um determinado cliente (cenário de exemplo)?
>
> 1) Select com join no banco (dados do pedido e do cliente) e passa a query
> para a view
>
> 2) Faz algo equivalente ao passo 1 mas criando os objetos correspondentes
> como Pedido, e cada pedido contendo um objeto do tipo Cliente que é quem fez
> o pedido. Se sim, então no que o CI te ajuda especificamente?
>
> Pergunto isso porque vi aquele tutorial de blog em 20min mas o blog não é
> orientado a objetos, e ainda não consegui pescar como o CI ajuda a construir
> uma aplicação orientada a objetos *de verdade*.
>
>
>
> 2008/6/4 Marcus Cavalcanti <[EMAIL PROTECTED]>:
>
>> Na verdade esse thread não é para tirar dúvidas, e sim para dividir
>> conhecimento, como estou vendo a galera animada com site, tutoriais, artigos
>> e etc, penso que pode ser uma boa contribuição, pois com certeza outras
>> pessoas passarão por essa situação.
>>
>> A questão toda é, na minha aplicação eu tenho uma estrutura um pouco
>> diferente da proposta por default pelo CI.
>>
>> Dentro do diretório 'application' eu tenho outros 4 diretórios: frontend,
>> backend, services e models.
>>
>> Tanto o 'frontend' quanto o 'backend' são as aplicações em si - no caso o
>> site e o admin - com todos os diretórios comuns as aplicações, como: config,
>> controllers, helpers, libraries, models, hooks, views, etc...
>>
>> E o diretórios 'models' e 'services' são os que guardam as informações do
>> dóminio da minha aplicação. O 'models' guarda os modelos, e o 'services' é
>> como uma fachada (façade pattern) para a minha aplicação, ou seja, nele eu
>> tenho ruma interface comum de acesso que implementam rotina de N ou mais
>> classes, no meu caso modelos.
>>
>> Eu preciso deixar o 'models' e os 'services' no mesmo nível do diretório
>> das aplicações, justamente para eles poderem ser compartilhados entre elas.
>>
>> Eis que surge o problema.
>>
>> Para carregar os modelos, dessa forma, basta eu usar:
>> $this->CI->load->model('../../models/Foto_Model', 'Photo', TRUE);
>>
>> Mas e para carregar as classes, que são como Libraries em sua essência?
>> Nesse formato acima não consigo, pois o framework retorna um erro como se eu
>> estivesse tentando istanciar o meu controller duas vezes.
>>
>> Solução: criei um helper, que serve como loader dessas classes.
>>
>> <?php
>> /**
>>  * ci_class_loader - load class in 'services' path
>>  *
>>  * @access    public
>>  * @param    string
>>  * @return    object
>>  */
>> function ci_class_loader( $path ) {
>>     require_once( $path.'.php' );
>>
>>     $name      = end( explode( '/', $path ) );
>>     $class     = ucfirst( $name );
>>     $ci        =& get_instance();
>>     $ci->$name =& new $class();
>>
>>     return $ci->$name;
>> }
>> ?>
>>
>> Partindo do princípio que suas classes começam com letra maiúscula, de
>> acordo com os coding stardads, e que o nome do arquivo é o nome da classe,
>> mas em minúsculo (padrão CI).
>>
>> Exemplo de uma chamada de um service em um Controller:
>>
>> <?php
>>
>> require_once('base.php');
>>
>> class Test extends BaseController {
>>
>>     function Test()    {
>>         parent::BaseController();
>>     }
>>
>>     function index() {
>>         $ret = ci_class_loader(ROOTPATH."/services/teste");
>>         echo "<pre>";
>>         print_r(get_class_methods($ret));
>>         echo "</pre>";
>>         die;
>>     }
>> }
>> ?>
>>
>> Só para ressaltar, que esse ROOTPATH é uma constante que eu defini no meu
>> index.php, para retornar apenas o PATH e não o FULLPATH da aplicação.
>>
>> Se quiserem adicionar esse conteúdo ao site, sintam-se a vontade, só
>> gostaria que me mantivessem como autor.
>>
>> No mais, qualquer dúvida estamos aí.
>>
>> Boa sorte a todos no processo de implementação do site.
>>
>> Abraço,
>>
>> Marcus Cavalcanti
>>
>>
>>
>> _______________________________________________
>> Lista mailing list
>> [email protected]
>> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>>
>>
>
> _______________________________________________
> Lista mailing list
> [email protected]
> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>
>
_______________________________________________
Lista mailing list
[email protected]
http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br

Responder a