Entendi, como o tutorial oficial não é orientado a objetos, pois não tem
domain model, e não achei outro tutorial mostrando, e além disso o site
oficial comete um erro conceitual ao confundir o 'M' do MVC com sendo as
entidades de banco de dados, acho que o CI não é pra mim. Vou partir para
Zend, Rais ou Django...

De qualquer forma obrigado pelos comentários, estou saindo da lista agora,
fui...

2008/6/4 Marcus Cavalcanti <[EMAIL PROTECTED]>:

> Cara você programar OO em qualquer lugar, até no CI. o CI é OO, tanto que
> usa MVC, que é um pattern OO, agora se você quer sair do feijão com arroz do
> framework, depende de você e das suas necessidades.
>
> O Kohana não tem um mapeador igual o Hibernate, mas nos padrões do Mapeador
> do RoR.
> http://docs.kohanaphp.com/libraries/orm
>
> Naõ entendi o lance do CSS, mas basicamente linko css com base_url();
>
>
>
>
> 2008/6/4 Renato Silva <[EMAIL PROTECTED]>:
>
>> Olá Marcus, entendo o seu esquema de um DAO para cada classe, minha
>> dificuldade é entender no que o CI ajuda o desenvolvedor, e como programar
>> OO no CI.
>>
>> O Kohana tem um mapeador O/R? Você conhece algum bom tutorial de Kohana/CI
>> que ensine a programar OO neles? Eu não me importo do Kohana não rodar em
>> PHP 4, você acha que fora isso o Kohana é melhor então?
>>
>> Outra dúvida, como você linka um CSS na mesma pasta? Só colocar o nome do
>> arquivo, como é natural, não funciona.
>>
>>
>>
>> 2008/6/4 Marcus Cavalcanti <[EMAIL PROTECTED]>:
>>
>>> 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
>>>
>>>
>>
>> _______________________________________________
>> 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