Quais foram suas principais dificuldades na utilização do framework?

Olá!

Bom, pelo o que vejo a maior dificuldade ainda é a documentação. Mas a minha curiosidade vai além do framework. Vocês já conheciam orientação a objetos antes de utilizar o Yii, ou outro framework? Qual seu nível de experiência com OOP? Para quem trabalha em equipe: tiveram dificuldades em "introduzir" o framework para os demais integrantes do time? Tiveram dificuldades para adaptar o fluxo de trabalho ao Yii, ou o contrário? Em algum momento você achou que seria mais produtivo sem um framework? Porque?

Pergunto isso, porque acredito que itens como esses também podem causar a não popularização do framework. Dificuldades como essas podem afastar novatos e criar uma idéia de que frameworks são feios, bobos e chatos =D

Como exemplo, no colégio onde trabalho, existe uma grande dificuldade quanto a orientação a objetos. O outro programador que trabalha comigo veio do ASP e nunca viu nada OO. Ou seja, ele está aprendendo PHP agora, e tenta fazer tudo como fazia no ASP. Códigos misturados com HTML, milhares de arquivos, cada um para uma função (valida_usuario.php, loga_usuario.php, conecta.php, exibe_arquivo.php, etc, etc, etc…). É um Spaghetti Code++!

Quando mostrei o framework e como ele funcionava, pareceu tudo lindo e maravilhoso, mas na hora que ele ficou cara a cara com Yii foi knockout no primeiro round! Ele se perdeu na estrutura de diretórios, não entendeu para que serve um Model e qual a diferença de um ActiveRecord e um FormModel, e por ai vai.

No final, restou uma imagem de que o framework não é flexível e diminui a produtividade. E como todos sabem a primeira imagem é a que fica. Vai ser difícil tirar essa idéia da cabeça do pessoal, mas aos poucos a gente consegue.

Então, digam ai o que já viram desse tipo de dificuldade.

Cara, tirando problemas c/ documentação, não consigo pensar em nenhum.

Mas acho que eu não posso contar, pq eu já programava em OO e já tinha alguma bagágem c/ Zend, alem de pesquisar bastânte outros fw (Até parar no Yii), também não tenho uma equipe aqui (Ainda, estou contando c/ uma mudança neste sentido no ano que vem)

A única coisa que posso falar "mal" do fw é que eu não gosto do ActiveRecord. Neste projeto aqui continuo usando, mas num futuro projeto pretendo analizar se vale a pena usar o Doctrine.

Acho que este problema que vc citou é o mesmo da dificuldade de entender OO de quem já vem de linguágem procedural, não se restringe a apenas PHP. Conheço um bocado de gente assim.

Passei um problema parecido assim a pouco tempo e, só consegui comprovar a diferença de produção mediante a um pequeno software feito de duas formas diferentes. Uma OO e outra procedural. Podendo assim mostrar as vantágens na mudança de regras de negócios, mudanças de DB e mesmo mudanças no design.

Vocês já conheciam orientação a objetos antes de utilizar o Yii, ou outro framework?

  • Sim, minha faculdade ma dá uma base consistente sobre OO

Qual seu nível de experiência com OOP?

  • Iniciante

Para quem trabalha em equipe: tiveram dificuldades em "introduzir" o framework para os demais integrantes do time?

  • Não, o pessoal se esforça para se manter dentro das boas práticas e aprender a utilizar as ferramentas necessárias para alcançar esta meta.

Tiveram dificuldades para adaptar o fluxo de trabalho ao Yii, ou o contrário? Em algum momento você achou que seria mais produtivo sem um framework? Porque?

  • Tive muito mais facilidade do que com o CakePHP

Caso me permita emitir uma opnião sobre o caso de seu colega:

  • Meu primeiro contato com OO na prática foi com JAVA e CakePHP. Entender a estrutura do Cake foi terrível. Acho que seria melhor seu amigo ler um pouco sobre OO e praticar com coisas mais simples para entender o conceito sem dor :), na minha opnião este sacrificio vale muito a pena! Estamos na era dos teste, otimização…

O Yii provê padronização de processos, com o qual podemos transmitir os conceitos adotados de forma mais clara para os novos programadores ou para os inexperientes

Eu programei muito tempo em PHP, porem sem usar OOP.

Depois quando comecei a programar em Java que vi o quando OOP faz diferença.

No início da impressão de que a gente tem que programar muito mais pra fazer coisas simples (e realmente é), mas com o tempo a gente vai percebendo o quanto de retrabalho se economiza em caso de grandes mudanças.

Exemplo:

Na antiga empresa que trabalhei todo o sistema da empresa (Vendas, Financeiro, Marketing) era feito em PHP e totalmente sem OOP. Até ai tudo bem(funcionava pelomenos…), o problema era que a empresa estava crescendo muito rapido, e com isso todas as regras de negócio mudavam muito rápido. Isso era extremamente estressante, pois todo o trabalho que tinhamos na segunda era jogado fora na sexta. Por fim acabei saindo da empresa.

Como sou um cara bem curioso, fui testar fazer o mesmo sistema porem usando padroes de projeto e oop.

Conclusão:

Nunca mais parei de programar em OOP. =)

Hoje trabalho com PHP pra outra empresa. Apesar de não gostar mais de linguagem não-tipada estou me adaptando bem.

Porque não gosta do ActiveRecord?

Eu já acho essa a parte mais legal do framework. Não escrever consultas SQL é muito legal =D

Sei que algumas pessoas sentem falta de alguns recursos no ActiveRecord do Yii, mas no geral ele atende bem as necessidades da maioria. Eu mesmo nunca senti falta de nada. Tem algum recurso do Doctrine que sentiu falta no Yii?

Sem dúvida seria interessante estudar sobre OO. Foi exatamente o que pensei que ele fosse fazer, mas acho que não fez =D Essa mudança de paradigma não é algo que se faz de uma hora para outra, mas com certeza é algo que vale muito a pena!

Uma coisa que gosto bastante no framework é essa questão do "conventions over configurations", o que "força" os desenvolvedores a seguirem um padrão, que, entre outras coisas, deixa o código mais organizado e com uma estrutura fácil de entender.

Porque não gosta de linguagens não-tipadas?

Eu já sou da opinião totalmente contrária. Prefiro muito mais linguagens não tipadas. Não me preocupar com tipos é um problema a menos para pensar =D

Pra mim yii fw é uma "mão na roda" e posso dizer com toda certeza, que é mais produtivo usando um fw. Consegue-se mais organização e reutilização de códigos usando OOP.

A estrutura do Yii (Modelo, Visão e Controle - MVC) não é bixo de sete cabeça. Um pouco de paciência e estudos a gente vai ficando mais esperto no assunto.

Sobre a documentação do Yii posso dizer que não é das melhores, mas minha grande ajuda sempre foi o FORUM. Nosso projeto aqui (ainda funcionando) está em PHP. Tentamos mudá-lo para PRADO, e no meio do caminho nos aparece o YII FW. Fizemos uns estudos com o Yii, e constatamos que ele é muito mais rápido e que o nosso projeto ficaria mais organizado. Conclusão: Estamos convertendo nosso projeto para Yii.

Só pra curiosidade de vocês… eu nao sabia nada de OOP, tive que meter as caras, hoje me dou bem com OOP.

Já sou fã do Yii ;D

Com certeza, não ter que escrever sql é sempre bom, mas nem sempre é possível no Yii. Minha aplicação já tem sql onde não consegui usar o AR pra pesquisar, e, isso mata a portabilidade entre bancos. (Não diretamente no banco, mas pela function findBySql)

Uma coisa que sinto falta é que não consegui um único objeto acessar de forma transparente mais de uma tabela (ao estilo como o hibernate do java).

O Doctrine ainda to começando a olhar, não posso dizer muita coisa ainda. nunca tinha usado Doctrine antes. To aprendendo doctrine justamente pra ver se ele pode suprir o que eu sinto falta no AR. Até agora ví algumas coisas pequenas que são um pouco mais simples, mas não justifica nem de longe trocar, mas ele tem fama de trabalhar c/ objetos como o hibernate faz. Se ele trabalhar c/ mais de uma tabela por objeto, vai ser fantástico.

Tenho um objeto que tem acesso a 6 tabelas (usando relacionamento no AR), traz tudo que eu quero ::)

Quanto a trazer, ele traz. O lance é como vc trabalha com os objetos.

Vou dar um exemplo melhor. Suponhamos que tenhamos as seguintes tabelas:


Pessoa (id, endereco, numero, bairro, municipio, uf, cep)

PessoaFisica(nome, identidade, orgaoexpedidor, cpf)

PessoaJuridica(razaosocial, nomefantasia, cnpj)

Usando Java com Hibernate ou JPA, eu teria as classes PessoaFisica e PessoaJuridica herdadas de Pessoa. No Yii eu tenho 3 classes relacionadas, mas as 3 herdadas de CActiveRecord, relacionadas na função "relations".

Na visão do banco, é a mesma coisa, mas a sua codificação fica diferente.

com Hibernate/JPA eu, por exemplo, instanciaria PessoaFisica, e teria os fields de Pessoa e PessoaFisica no mesmo objeto. No Yii eu tenho apenas os fields relacionados a PessoaFisica, tendo que acessar um segundo objeto, que está relacionado para acessar o field que eu preciso.

No caso, o mesmo acesso ficaria:

No Yii:


$pessoaFisica->Pessoa->endereco = 'meu endereco' 

No Java:


pessoaFisica.endereco = 'meu endereco' 

E, é isso que eu estou procurando no Doctrine. Não me chinguem, não to falando mal do Yii, só to esplicando pq [color="#8b0000"]eu[/color] não gosto do ActiveRecord, mesmo ele sendo um pattern bem aceito pela comunidade.

Não vejo problema em apontar para um segundo objeto e obter mais dados. Acho até mais organizado e de cara fico sabendo o que estou fazendo no codigo (transparência). Vale a pena usar os recursos nativos do Yii.

vi seu exemplo e eu colocaria nas tabelas PessoaFisica e PessoaJuridica o campo "id_pessoa".

Ficando assim:

Pessoa (id, endereco, numero, bairro, municipio, uf, cep)

PessoaFisica(id_pessoa, nome, identidade, orgaoexpedidor, cpf)

PessoaJuridica(id_pessoa, razaosocial, nomefantasia, cnpj)

Dessa forma vc ficaria sabendo qual endereço pertence a quem nas tabelas "PessoaFisica e PessoaJuridica"

Ou então, eu mataria a tebela "Pessoa" e coloraria seus campos dentro das tabelas "PessoaFisica" e "PessoaJuridica". Não vejo o porquê da tabela "Pessoa" que só contém endereço ficar do lado de fora.

Armando,

No caso o exemplo dele até poderia suprimir e colocar tudo em um lugar só, mas com herança isso é aproveitado criando uma classe abstrata que pode ser utilizada em outros lugares e assim concordo em ter pessoa, pessoaFisica, pessoaJuridica. Seguindo esse exemplo nos cadastros teremos sempre pessoaFisica e pessoaJurica, mas nunca uma pessoa.

Fica mais claro nesse exemplo

conta(agencia, codigo, titula, senha, saldo, ativa)

contaEspecial(limite)

contaPoupança(aniversario)

depois sobrescrevemos métodos como saldo em cada caso.

Para "endereço" eu tenho 4 tabelas loc_bairro, loc_cidade, loc_lagradouro, loc_uf e faço busca no sistema no estilo CORRERIOS, tipo: digite o CEP e traz o endereço… tudo no esquema AJAX.

Tenho também uma tabela "pessoa" que possui fields "idPess, idProfi, campos de endereço que são preenchidos na busca estilo "correios" e outras coisas…" o "idProfi" pertence a tabela "profissao".

Outro exemplo que tenho aqui é a tabela "funcionario", claro além de ter um idFunc, possue também o idPess da tabela "pessoa".

Entendi o Daniel. O fato é que as classes de "Modelo" extende CActiveRecord.

Se conseguir um feito com o “Doctrine” usando os tres modelos, poste aí pra gente. :)

O início

Eu conheci o Yii praticamente ao acaso.

Nunca trabalhei com frameworks de PHP antes, mas fui solicitado a dar apoio a uma equipe que estava decidindo qual framework utilizar. A cada dia ele apresentavam um FW pra galera. Fui só num dos dias, justamente no dia…do Yii!

Ok, não o escolhi por ser o unico FW que vi, mas porque já vinha desenvolvendo um mini-framework particular e, bom…o Yii era toda a UTOPIA que eu imaginava criar e mais um bom bocado que nem havia imaginado, KKKKKKK :lol:

Fiquei absolutamente maravilhado com o que vi: um FW robusto, mas que nao te "prendia" a um modelo e permitia extensões de maneira simples e, claro, web 2.0.

Meus problemas

Aí foi o início de varios meses de testes e muuuuita dor de cabeça.

  • Problemas para instalar no Wamp (foi uns 3 dias só nisso)

  • Eu uso Oracle. Yii não dava suporte ao Oracle. Entrei em desespero profundo!! :P. Em um framework desconhecido, não sei como tive a coragem, mas arregacei as mangas e fiz, por conta própria, o driver do AR para Oracle que hoje é utilizado no framework. É por isso que o mesmo ainda tem um pequenos bugs, mas ao poucos tô corrigindo o que posso, rsrs.

Essa tarefa me custou cerca de 1 mês a aprender a estrutura do Yii e até a do Prado para gerar os metadados.

  • Nesse meio tempo, foi uma pauleira pra fazer o Wamp trabalhar com o pdo_oci (do Oracle)!! O driver para Windows é meio bugado e eu tive que atualizar meu cliente Oracle para a versão 10g para funcionar. Umas 2 semanas só com isso.

Ufa! Tudo preparado, comecei a mexer pra valer no Yii (ja tinha lido bastante e feito uns testes, mas nao tinha feito nada pra valer). Hora de mais dificuldades:

  • Sem experiencia com frameworks, sofri HORRORES pra entender como funcionavam as ACTIONS, como se renderizava modelos e, principalmente, para enteder a sacada do ActiveRecord. Programador estrutural, eu queria porque QUERIA fazer um arquivo de script para minhas funções PHP, huAhahahAH :rolleyes:. E antes eu imaginava entender (e usar) MVC… Até entender controllers e suas actions, sofri MUITO.

Depois disso foi mais tranquilos, mas não sem percalços:

  • Dificuldades com Ajax

  • Dificuldades com jQuery

  • Dificuldades com RBAC e UserIdentity.

  • Dificuldades para lidar com os Modules e criar layouts personalizados, porém herdados do layout da aplicação principal.

Em geral foi isso. Porém, não há arrependimentos, só tive ganhos. Hoje, nao troco o Yii por Java/Struts/Whatever nem sob tortura. Felizmente, tive essa carta branca para estudar o framework e implanta-lo aonde trabalho.

A produtividade da equipe aumentou de forma assustadora, assim como a curva de aprendizado de novos integrantes está bem reduzida (ministrei treinamentos no Yii com cerca de 15h).

O engraçado é que rolou um preconceito geral com relação ao framework, visto que alguns integrantes vinham de Java e outros não acreditavam em frameworks (antes do Yii eu tb era assim ;)). Antes do treinamento rolava um desdém e pouco caso.

Porém, no PRIMEIRO DIA do treinamento, era engraçado demais ver a cara de espanto dos mesmos que antes desdenhavam. Alguns não acreditavam no que estava acontecendo (no primeiro dia eu já ensinava a gerar o scaffolding).

Quando começaram a usar pra valer houveram muitas duvidas ainda, mas eu diria que foram mínimas. Por vezes haviam problemas que eram classificados como "bugs do Yii". Aos poucos foi-se vendo que o problema na verdade estava entre o teclado e a cadeira, rsrsrsrs. Hoje, é MUITO dificil termos um problema estranho e acharmos que é "bug do Yii". Quando acontece, hoje é mais facil ouvir "acho que eu fiz alguma besteira", rsrsrs

@Daniel

Realmente, o AR ainda não é totalmente objeto-relacional. Se pudesse fazer o que vc está querendo, seria fantástico.

Isso é uma coisa muito pessoal mesmo.

Eu trabalho até altas horas da madruga, durmo cerca de 5 a 6 horas/dia.

Ai chega la pelas 2hs e vejo algo assim:




<?

if ("6 Galinhas" + "4 Elefantes" == "10 Aves") {

   echo "Animal Fail!"; //php estupido

}

?>



Mas nunca que vou entender isso.

Ainda mais quando queremos trabalhar com sobrecarga de métodos, aí que não funciona mesmo.

O PHP em sí é bom (rapido em performance e desenvolvimento).

Mas para OO ele ainda tem muito pra crescer.

Um caso curioso é que estou estudando para tirar a certificacao do PHP, e o mais difícil até agora é entender qual o padrão usado nas funcoes… (strtotime / nl2br)

O bom de linguagens fracamente tipadas como o PHP é a liberdade e o poder que ela dá.

mas, como já dizia o Pai do Clark Kent "Com grandes poderes vem grandes responsabilidades".

Por isso que linguágens fracamente tipadas tem que ter muito mais cuidado em vários quesitos, mas, no final, adoro as duas. :)

Ou seria o Tio do Peter Parker? ::)

HAUHUAhauha …

só to falando besteira hoje :)

Tá, o tópico não e tão atual, mas lá vai:

1 - Estou acostumado com ferramentas produtivas. Trabalho para uma empresa com Genexus há mais de 6 anos.

2 - PHP na unha não é produtivo se você não tiver bastante código pronto (e eu não tenho)

3 - A bomba do Genexus não gera código PHP, gera Java, .NET, Ruby, FoxPro, C e até COBOL, mas PHP não :>(

4 - Tinha assumido o compromisso de fazer um site de eventos para um amigo

5 - Só uso PHP para meus projetos particulares

Saí à caça de uma ferramenta que me trouxesse a produtividade do Genexus, porém, que me desse mais liberdade para trabalhar com o código (assim como o Neo do Matrix, não gosto da sensação de não ter o controle sobre meu próprio código) e em PHP.

Dei de cara com o Yii.

Demorou um pouco até acostumar com o MVC, a estrutura de framework e entender a "magia" do scaffolding e das funções prontas dp Yii. A documentação foi uma pedra (e aínda é) porque eu prefiro exemplos de funcionamento a uma definição de classes, com métodos, argumentos e blablabla. O fórum é meu melhor amigo. Quando preciso de algo, primeiro vou no fórum e depois se não achar vou na documentação.

E gostei tanto da idéia de framework que saí à caça de frameworks CSS para meu sócio/designer não sofrer mais também. Encontrei o YAML.

Atualmente, usamos Yii e YAML. Fica tudo muito padronizado, funciona tudo cross-browser, sabemos exatamente onde mexer e ele pode ir fazendo o style enquanto eu faço a funcionalidade.

Como notei que algumas coisas nós estamos precisando utilizar com frequência em nossos projetos, estou iniciando a construção de um repositório particular de módulos prontos (e aprendendo a trabalhar com módulos em Yii). Talvez, isso se converta em um "mini-cms". Minha idéia é que eu tenha em mãos algo quando o cliente pedir por exemplo: eu quero um fórum, uma enquete, um chat, uma galeria de fotos e blabla, eu simplesmente copiar os módulos para o projeto do cliente e estilizar o frontend.

Isso vai me trazer mais produtividade ainda. É produtividade sobre produtividade!!!!!

Abraços !!!