20 anos depois e ainda não entendemos reusabilidade

Elomarns, acho que vc acidentalmente duplicou o seu post. O texto está escrito 2 vezes. Pode editar ali em cima e corrigir?

Aliás, concordando com o que você falou, vi algumas coisas em PHP recentemente que me surpreenderam. Tanto pela evolução da linguagem, quanto do estilo de programar da própria comunidade.

Para citar 3 exemplos: PrestaShop, Wordpress e Joomla.

Todos com códigos bem escritos, fáceis de manter, performáticos e com usuários de escalas consideráveis. E sem tanta burocracia.

[quote=ViniGodoy]Elomarns, acho que vc acidentalmente duplicou o seu post. O texto está escrito 2 vezes. Pode editar ali em cima e corrigir?

Aliás, concordando com o que você falou, vi algumas coisas em PHP recentemente que me surpreenderam. Tanto pela evolução da linguagem, quanto do estilo de programar da própria comunidade.

Para citar 3 exemplos: PrestaShop, Wordpress e Joomla.

Todos com códigos bem escritos, fáceis de manter, performáticos e com usuários de escalas consideráveis. E sem tanta burocracia.[/quote]
É verdade, o conteúdo do post foi duplicado mesmo. Geralmente me sinto mais a vontade escrevendo textos um pouco mais longos em um editor de texto, e acabei colando duas vezes sobre o text area do GUJ.

Enfim, já corrigi o post, e desculpe o engano.

Nem sempre é possivel reutilização. Em certas companhias devido as caracteristicas do negocio a reusabilidade é minima mas isos nao impede interoperabilidade de serviços. quem diz isso é thomas erl.

[quote=ViniGodoy]Elomarns, acho que vc acidentalmente duplicou o seu post. O texto está escrito 2 vezes. Pode editar ali em cima e corrigir?

Aliás, concordando com o que você falou, vi algumas coisas em PHP recentemente que me surpreenderam. Tanto pela evolução da linguagem, quanto do estilo de programar da própria comunidade.

Para citar 3 exemplos: PrestaShop, Wordpress e Joomla.

Todos com códigos bem escritos, fáceis de manter, performáticos e com usuários de escalas consideráveis. E sem tanta burocracia.[/quote]

Não vi esses codigos, eu tinha visto do PHPBB, que é uma bosta, antigos projetos feitos em PHP desanimam muito na linguagem.

Em alguns pontos concordo bastante, talvez o java tenha tentado abraçar um mundo que não lhe pertence, eu quando conheci java pra web amei, estudei varios frameworks, para ver qual era melhor, hoje, não consigo, a lentidao para se iniciar, e ver o resultado e muita, quando vc meche com Ruby e Python e pode fazer seus testes e manipulações de forma mais interativa, fica muito mais prático, hoje não consego programar web em Java sem pensar em como isso ja estaria pronto em Ruby/Python.

Mas para desktop, ainda não estou muito ambientado com essas linguagens, ainda acho java melhor para aplicações rodando em clientes.

[quote=rodrigo.lopes]Após ler o texto, ou melhor, até ler quase o final, pois nao consegui terminar de ler…

a minha humilde opinião:

Nao gosto de pessoas negativas, que texto mais negativo! trabalho há 5 anos com java e ja tive o prazer de trabalhar em otimos projetos…

Pedras no caminho? é claro que teremos, a vida seria maravilhosa se nao existissem…

E aprendemos com nossos erros, crescemos e evoluimos, certo?

bom pelo meno eu penso assim… nunca curti trabalhar com pessoas que so ficassem reclamando, o que eu li foi uma reclamacao total, uma negatividade só, essa foi a minha opinião.

nos dediquemos mais e reclamemos menos.

“Perder menos tempo escrevendo textos longos, e sobrará tempo pra estudar mais…”

:wink: [/quote]

Cordeirinho demais você, as pessoas contestam as coisas pq se preocupam, seria muito mais fácil fazer até onde dá e as 18:00 levantar da cadeira e foda-se o projeto, mas as pessoas que eu vejo reclamarem, como o caso da amiga autora do texto, são pessoas que se envolvem no projeto, que querem ver a coisa sair bonita, pois afinal tem meu nome no projeto, não quero ver meu nome em coisa ruim. Esse deve ser o sentimento.

Eu já vi o código do Wordpress… não gostei tb nao…

É organizado pra ser PHP…

Mas tudo é PHP… fica muito ruim…

É a mesma coisa de Java só com JSP…

Se os Rails não tomarem o lugar de Java… acho que de PHP pelo menos toma…

[quote=ViniGodoy]Elomarns, acho que vc acidentalmente duplicou o seu post. O texto está escrito 2 vezes. Pode editar ali em cima e corrigir?

Aliás, concordando com o que você falou, vi algumas coisas em PHP recentemente que me surpreenderam. Tanto pela evolução da linguagem, quanto do estilo de programar da própria comunidade.

Para citar 3 exemplos: PrestaShop, Wordpress e Joomla.

Todos com códigos bem escritos, fáceis de manter, performáticos e com usuários de escalas consideráveis. E sem tanta burocracia.[/quote]
ViniGodoy, é um fato que a comunidade PHP tem uma fama de ser bastante desleixada em relação a características importantíssimas no desenvolvimento de software, como clareza do código, coesão, acoplamento e cobertura de testes automatizados. No entanto, pra ser sincero, eu acho que essa é uma fama merecida. A maior parte da comunidade PHP realmente programa de forma a ter algo funcionando e pronto. A razão disso ocorrer é que devido ao PHP ser bem fácil, muitas pessoas sem maiores conhecimentos sobre desenvolvimento de software se aventuram a programar na linguagem. Obviamente o PHP em si não tem nenhuma parcela de culpa nisso

Em relação às aplicações que você mencionou, eu já olhei o código de apenas uma: o WordPress. Na minha opinião, não há sistema de blogs melhor do que o WordPress. No entanto, se você tiver que mudar algo no código dele precisará de paciência. Da última vez que eu vi, o código era medonho, com classes gigantes responsáveis por todas as letras do MVC. E pelo que tenho lido recentemente, acho que isso não mudou em nada. Sendo assim, acho que você deve ter dado sorte ao olhar o código do WordPress, tendo visto uma parte mais bem escrita do que a média.

Aliás, eu diria que em geral o código de aplicações open source PHP é bem ruim. Além do WordPress, já tive que alterar o código de uma instância do Zen Cart, e posso dizer que a situação ali também era péssima. E como já vi pessoas reclamando da qualidade do código de várias outras aplicações open source feitas com o PHP, e considerando a falta de preparo de boa parte dessa comunidade, eu diria que código ruim é regra nos projetos open source em PHP, e não exceção.

Mas como disse acima, a culpa não é da linguagem, que resolve bem o problema a que se proõe. Além disso, a comunidade PHP aos poucos está amadurecendo. É meio tarde, mas é melhor do que nunca.

[quote=rogelgarcia][quote=Felagund]Em se falando de hibernate, temos um problema serio, como o Java é Tipificado, e não podemos criar campos em tempo de execução em uma classe (Sim, tem, mas ninguem é loco de ficar usando javassist a torto e adireita, e mesmo assim não é nativo), a solução mais elegante é o ActiveRecord do Rails, na minha opnião, você não se atem a detalhes da base, só se preocupa com detalhes do objeto, tratar os dados, não fica aquele monte de Anotações ou XML.
[/quote]

Creio que o problema não está em escrever os campos, e sim, realizar os mapeamentos ORM. Mesmo com o ActiveRecord, a aplicação continua sendo OO, e o banco relacional.

Um dos problemas que vejo no hibernate é que ele é incompleto e a forma de mapeamento é errada. Exemplo, quando mapeamos um relacionamento @OneToMany. Já definimos no mesmo lugar como é feito o mapeamento e como é feita a persistencia.
Os problemas disso são:

  • A forma de mapear, e a forma de persistir, são duas coisas diferentes, logo não deveria estar tudo em apenas uma única anotação.
  • O outro problema é que vc define a forma de persistir estaticamente, ou seja, vc só poderá usar essa forma de persistir. Se tiver duas situações no seu programa, o que é comum, onde em um lugar se deseja persistir de uma forma, e em outro lugar de outra forma dependendo da regra de negócio, não será possível.

Por isso sempre faço os mapeamentos não deixando o hibernate fazer nada de forma automática porque isso não funciona. Ao invés disso, executo códigos para persistir de acordo com a necessidade do meu sistema, quando for necessário. Acho que isso resolve alguns problemas que o vini citou…
[/quote]

Vc tem razão. mapeamento e persistência são coisas diferentes.
É por isso que no MiddleHeaven eu não segui essa abordagem. no MH vc consegue persistir objetos sem ter dito nada nem em xml, nem em anotations.
O proprio java é suficiente para fazer o mapeamento e saber se é 1-1 1-N , N-1, etc… Mas existem anotações para coisas como dizer que certa associação é obrigatoria (NotEmpty) e campos não podem ser vazios etc…

O MH parte do conceito de modelo de dominio. Ele constroi esse modelo analizando as classes, mas o modelo pode se criado à mao tb. Diferentes analizadores podem ser usados. Então eu posso misturar as anotações do MH com as do JEE com as do JPA, etc… desde que haja uma analizador que as entenda essa info será colocada no modelo.

Depois a partido do modelo de dominio, o modelo de persistencia é gerado. Este modelo é igual ao de dominio no caso default ( as colunas tem os nomes dos campos,as tabelas as das classes etc…) Tb aqui podemos alterar através de analizadores. Poderiamos, por exemplo, ter coisas como um @Column ou um xml que configura para um banco x espeficio.

Porque o modelo de persistencia do MH não é apenas para banco, então este passo é necessário porque o mesmo modelo de dominio pode ter partes em banco, e partes em xml, ou em memoria,etc…

O Hibernate, embora famoso, não é lá muito bem desenhado… e isso se nota cada vez mais.

[quote=sergiotaborda]
O Hibernate, embora famoso, não é lá muito bem desenhado… e isso se nota cada vez mais.[/quote]

E vai o povo tentando padronizar… faz uma especificação totalmente baseada nesse desenho errado… aff

Esse JPA tá todo errado… heheheh

(Estou curioso para ver como será a persistencia do MH (já li todo o site. heheh)… a um tempo atrás fiz milhoes de rascunhos num projeto para substituir o hibernate, fiz até protótipos… funcionaria bem… sem uma série de limitações que o hibernate tem… Não implementei porque de acordo com meus calculos gastaria pelo menos um ano pra implementar tudo… E tinha outras coisas pra fazer :frowning: )
(No site vc pergunta se integração com hibernate é necessária: Na minha opnião não, se fizer tudo que o pessoal espera que o hibernate faça… mais algumas coisas… Talvez seja necessário implementar o JPA, apesar de eu achar que JPA é bobagem)

Bom, eu concordo com a autora, mas existe um porém nisso tudo:

O propósito dos Frameworks não é a fácil aprendizagem e sim a agilidade no processo de desenvolvimento.

Por exemplo, se programar MVC usando Servlets e JSP, existem milhões de coisas que vc tem que fazer, em termos de XML e configurações, além de criar taglibs específicas e criar a própria estrutura MVC. Usando um Framework MVC você já tem muitas coisas prontas (Normalmente o “Controller”), porém, isso não quer dizer que você vai pegar o framework e sair usando como se já fosse “amigo” dele de muitos anos, tem que aprender a usar igual e ler sim várias páginas de uma documentação.

Entendo que em um Processo de Desenvolvimento de Software é complicado você parar para ler uma documentação de 500 páginas e, por isso, concordo com a autora.

Agora, discordo um pouco da questão de reutilização. Muitos Frameworks são, sim, reutilizáveis. Inclusive, gosto muito do JSF, que muitos aqui parecem que odeiam. Ele é um Framework que “parece” fácil, pela questão das tags e tudo mais, e quem se prende somente a isso, realmente vai odiar o Framework. Ele é muito mais que isso, tem todo um Ciclo de Vida bastante complicado de entender bem, mas que é extremamente útil.

Enfim, desenvolver java para sites web (portais, sites pessoais, etc…) realmente é um desperdício, agora comparar sistemas que rodam na web feitos em Java com sistemas em PHP é sacanagem. Sem contar que acho o código Java muito mais limpo e legível que o PHP.

Enfim, gostei do artigo, e não quero gerar flames contra quem curte PHP, é apenas minha opinião e não uma verdade absoluta. hehe.

Abraços!

Por que é sacanagem “comparar sistemas que rodam na web feitos em Java com sistemas em PHP”? Até onde eu sei, nenhuma das duas linguagens é inerentemente superior a outra no quesito aplicações Web. E exatamente por isso, a afirmação “acho o código Java muito mais limpo e legível que o PHP” não faz o menor sentido. De quê código Java você está falando? E de que código PHP? É completamente sem sentido afirmar que um código qualquer não especificado escrito em uma linguagem é mais limpo e legível que um outro código qualquer também não especificado escrito em outra linguagem.

Olha, eu nunca li um artigo formal discutindo sobre isso, mas eu acredito que a maior de todas as dicotomias falando-se em desenvolvimento de software é a relação Produtividade x Manutenibilidade

Hà quem acredite que essas coisas podem evoluir juntas, mas esse é o grande pulo do gato, ou melhor, no bordão da Engenharia de Software, essa é a verdadeira Bala de Prata.

Não vou me aprofundar no exame dessa questão até porque parto do principio que vocês sabem do que estou falando por experiencia própria. Nenhuma linguagem é plenamente mais produtiva ou mais mantenível do que outra, apenas são concebidas com propósitos diferentes. Contudo, uma vez que são linguagens Turing completa você pode pender essa balança para o lado que desejar. Muitas vezes essa questão é referida como linguagens fortemente tipadas x linguagens fracamente tipadas. Assunto já exaustivamente discutido.

Quando voce compara Java com Delphi ou PHP voce deve ter essa relação em mente, sempre. Essa noção evitaria comentários ingênuos e flame wars.

O problema é que existe um conjunto de plataformas em que uma aplicação assenta.
Desde de a plataforma fisica até à de aplicação passando pela plataforma alta e a virtual.

Cada tecnllogia de desenvolvimento: java, .net, C, et… lida com este fato de forma diferente. Em C vc acessa a plataforma fisica diretamente e isso torna as coisas muito complicadas porque vc será responsavel de 5 plataformas (desde a fisica à de aplicação)… em java, vc é responsável apenas pela plataforma de aplicação. É uma simplificação enorme.

Só que a plataforma de aplicação não é a aplicação. ela é algo que está abaixo e lhe dá suporte. normalmente o pessoa chama de infra ou “framework” ou algo assim.

Em todas as aplicações vc precisa criar uma plataforma de aplicação. Isto não é optional. a questão é como as pessoas fazem isso. a grande maioria não sabe que isto existe e quando usam o Spring junto com o hibernate e o Struts não enxergam que essas 3 coisas pertecem na plataforma de aplicação. As coisas que vc escolhe por e não por nessa plataforma fazem o desenvolvimento da aplicação em si ser mais facil ou menos.

O segredo é este: tenha uma boa plataforma de aplicação e o desenvolvimento da aplicação será produtivo e de facil manutenção. Não tenha uma boa plataforma de aplicação e será um inferno. Será um inferno também se vc a tem, mas não sabe ( como no exemplo acima do spring-hibernate-struts).

Uma boa plataforma de aplicação leva a uma melhor qualidade interna e portanto a mais produtividade (mais detalhes aqui).

[quote]
Quando voce compara Java com Delphi ou PHP voce deve ter essa relação em mente, sempre. Essa noção evitaria comentários ingênuos e flame wars.[/quote]

Comparar Delphi com Java ou PHP não é honesto porque são plataformas virtuais diferentes. Por exemplo , no java vc tem a JVM , em cima dela um web container e em cima dele a aplicação web. Agora faça isso com Delphi… vc terá que criar o web container do zero. É um passo a mais que mata a flexibilidade da plataforma. não é por acaso que hoje em dia apenas se aposta em plataformas abrangentes capazes de fazer todo o tipo de aplicação.
( o exemplo é mais obvio quando comprar delphi e php e java para dispositivos moveis)

Por que é sacanagem “comparar sistemas que rodam na web feitos em Java com sistemas em PHP”? Até onde eu sei, nenhuma das duas linguagens é inerentemente superior a outra no quesito aplicações Web. E exatamente por isso, a afirmação “acho o código Java muito mais limpo e legível que o PHP” não faz o menor sentido. De quê código Java você está falando? E de que código PHP? É completamente sem sentido afirmar que um código qualquer não especificado escrito em uma linguagem é mais limpo e legível que um outro código qualquer também não especificado escrito em outra linguagem.[/quote]

Bom, como eu falei, isso foi uma opinião pessoal, eu odeio aqueles $_, <?, etc… do PHP, acho que complica a leitura do código. E eu não sei se ainda é assim, mas na época que eu mechi com PHP, chamavam-se métodos de “function”. São coisas que pra alguns não tem importância, mas quando eu passei pra Java, passei a achar mais fácil a leitura de códigos.

Com relação a grandes sistemas, posso estar errado, mas nunca vi um site de banco, por exemplo, desenvolvido em PHP. Banco do Brasil e Itaú, por exemplo, são desenvolvidos em Java.

Só quero deixar claro que é, em partes, uma opinião pessoal. Principalmente a questão da leitura do código. A questão de grandes sistemas também é pessoal porque é a visão que eu tenho, mas posso estar errado.

Abraço!