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

Responder a