Faz sentido evitar uma estrutura ao criar um webapp grande com PHP?

9

Como desenvolvedor de aplicativos web PHP há vários anos, tive minha parte de MVCs e estruturas. A princípio, pensei que eram a melhor coisa desde pão fatiado; tudo parecia ser muito fácil de implementar.

Agora, no entanto, parece que, quanto mais complexo o aplicativo fica, mais problemático o framework apresenta; portanto, tenho que desenvolver soluções alternativas para superá-los. Essas soluções alternativas são geralmente bastante assustadoras e complexas, pois tenho que me aprofundar no código principal da estrutura e fazer alterações para que ele se comporte da maneira que eu quero.

Por exemplo, em um dos meus projetos em que uso Slim (C) + Idiorm (M) + Twig (V) (que acredito ser muito flexível), tenho que criar uma função personalizada apenas para exibir dados dinâmicos nos modelos principais; sem uma estrutura, eu poderia simplesmente executar mysql_query () no arquivo incluído.

Ok, estruturas são legais se eu estiver criando um site de perfil de empresa simples; Posso apenas digitar algum código em uma noite e eles geralmente estão prontos pela manhã, e a quantidade de boas práticas de codificação e padrões de design que aprendi com eles é muito valiosa.

Mas, na verdade, para um aplicativo Web complexo como um sistema de gerenciamento escolar completo baseado na Web, as estruturas geralmente atrapalham meu processo de negócios, como no exemplo acima.

Portanto, minha pergunta é: está tudo bem voltar ao básico e usar código PHP padrão e bibliotecas para realizar meu próximo projeto, onde pode haver um zilhão de estruturas e bibliotecas, desde que eu possa usar suficientemente boas práticas de codificação e seguir padrões de design sensíveis como MVC? Minha equipe de desenvolvimento é bem pequena: apenas 2 programadores e 1 designer. O outro programador concorda com meus pensamentos acima.

Furunomoe
fonte
11
"No entanto, quanto mais complexa a aplicação fica, mais aborrecimentos fico com as estruturas". Isso é apenas argumentativo e subjetivo. Você pode remover esse tipo de reclamação e chegar à pergunta real? Você pode fornecer exemplos concretos e específicos de um problema que deseja resolver? Se isso é apenas "eu não gosto de estruturas", não é realmente uma pergunta muito boa. Talvez você possa se concentrar em algo em que haja uma resposta real, não um compartilhamento de opiniões.
31512 S.Lott
@ S.Lott: Bem, eu forneço um exemplo na minha pergunta. E, na verdade, eu não odeio estruturas. Eu só quero saber o que as pessoas pensam sobre não usar uma estrutura PHP nos dias de hoje.
Furunomoe 02/02/2012
"Muitas vezes tive que criar uma função personalizada apenas para exibir dados dinâmicos"? Não é um exemplo muito detalhado. Não está claro por que ou como a estrutura falhou. Há uma possibilidade muito remota de você estar usando a estrutura incorretamente.
31512 S.Lott

Respostas:

17

Minha experiência é praticamente o oposto da sua. Ao fazer coisas pequenas e rápidas, uma estrutura pode "atrapalhar" um pouco, pois você precisa definir seu código de uma certa maneira e pensar sobre as coisas com cuidado antes de prosseguir. Ao pular direto para mysql_queryvocê, seu protótipo estará em funcionamento muito mais rápido.

Porém, para sites grandes e complexos, definir cuidadosamente o código e realmente pensar em como você escreve seu código é extremamente importante se você deseja um site que possa ser mantido em manutenção no futuro.

Em particular, adicionar mysql_querychamadas a partes aleatórias do ciclo da página geralmente é uma péssima idéia. Você pode ter um aqui e outro ali para começar e não é grande coisa, mas em pouco tempo você teve dezenas de páginas espalhadas por todo o lugar e está se perguntando por que suas páginas levam três segundos apenas para renderizar. Ou você altera seu esquema e as seções aparentemente não relacionadas do site são interrompidas por motivos desconhecidos.

Dean Harding
fonte
11
Claro que não joguei aleatoriamente mysql_query()aqui e ali. Quero dizer, no PHP clássico, posso simplesmente adicionar uma chamada a algo como Categories::read_all()e fazer loop pelo resultado em algum arquivo header.php, enquanto no Twig eu tenho que criar uma função Twig personalizada para isso. E para prototipagem, Eu amo as características de andaimes :)
Furunomoe
11
você não precisa de uma estrutura para elaborar e refletir cuidadosamente sobre seu código. é mais fácil fazer isso sem a estrutura. estruturas forçam padrões de organização de código medíocres para você.
Raynos
3
As estruturas realmente brilham quando você está realizando projetos complicados, pois definem um conjunto de regras e diretrizes que você deve seguir. Marquei a resposta de Dean com +1 porque essa também foi minha experiência.
Burhan Khalid
7

Na minha opinião, uma estrutura só deve ser usada se facilitar o processo de desenvolvimento para você, e não for complicada. Não há nada errado em não usar uma estrutura ou criar a sua própria, especialmente para pequenos projetos.

Obviamente, você ainda precisará prestar atenção aos aspectos de estrutura e segurança, mas, considerando que você usa estruturas há muitos anos, provavelmente já conhece esses aspectos de dentro para fora.

Para projetos maiores, eu concordo com os outros, o que significa que o uso de uma estrutura provavelmente será a melhor opção a longo prazo.

Daniel Scocco
fonte
O que é mais fácil para um site pequeno pode não ser mais fácil para um site grande. E o contrário.
Goran Jovic
11
@Goran Jovic, concordou.
Daniel Scocco
11
+1 para building your own. Quer você perceba ou não, você terá inúmeras funções auxiliares e / ou classes, que podem ser consideradas sua própria estrutura.
Izkata 02/02/12
5

Minhas experiências com "estruturas" do lado do servidor foram bastante desagradáveis, por exemplo:

A) Jar arquivo inferno onde estruturas conflitam uns com os outros ou o servidor de aplicativos para versões mutuamente incompatíveis de coisas que você não quer e não sabe nada sobre e não está em posição de ditar de qualquer maneira, pois impedirá a implantação em vários servidores.

B) Explosão catastrófica da criação de objetos mais simples em milhares de execuções SQL desnecessárias.

C) A noção bizarra de que codificar 100 linhas de XML é de alguma forma mais fácil ou mais confiável do que codificar 2 linhas de Java.

D) A necessidade de escrever centenas de linhas de POJOS do lado do servidor completamente desnecessárias para mapear objetos do lado do cliente em outro, ou às vezes em vários outros idiomas (C # JS etc)

E) Não tendo idéia do que realmente aconteceu quando você recebe um rastreamento de pilha profunda de 30 níveis que nem inclui a linha de código usada para chamar a estrutura.

Seja um renegado, escreva sua própria estrutura ... você não se arrependerá, desde que planeje eliminar todas as coisas desnecessárias que os outros o fazem pensar que você precisa. Então você entenderá tudo, ele será enviado em Kb em vez de Mb e provavelmente será "executado em qualquer lugar", que foi um dos princípios básicos do Java, não foi?

Tente pensar desta maneira "por que preciso disso ... é apenas para manter a estrutura feliz?" .. Se eu não preciso disso, então o que mais eu não preciso?

Chris Harlow
fonte
4

Houve uma apresentação dos desenvolvedores do Django, que estou tendo problemas para encontrar agora, mas eles falam sobre o "vale da eficiência", onde uma estrutura o torna mais produtivo.

Supondo que você não tenha conhecimento da estrutura ao iniciar um projeto, sua produtividade inicialmente será muito baixa - você estará aprendendo a convenção da estrutura em vez do idioma da linguagem (que espero que você já saiba).

Depois de um curto período de tempo, você terá aderido às convenções e é aí que as estruturas realmente brilham - de repente, sua produtividade é superada e você está progredindo e obtendo uma velocidade incrível no desenvolvimento.

Eventualmente, porém, o projeto se tornará de tal tamanho que a estrutura será mais uma restrição do que um benefício, e você se verá confrontando a estrutura para tentar implementar alguns recursos.

Na apresentação, eles mencionam que, é claro, se você já tem conhecimento das convenções da estrutura, os projetos de menor porte não têm o obstáculo inicial à eficiência.

Portanto, para pequenos projetos (na minha experiência, qualquer coisa abaixo de 500 horas), sua eficiência com uma estrutura será maior, provavelmente, do que sua eficiência sem. Depois de atingir um determinado limite (entre 500 e 800 horas, IME), você começa a perceber que há limitações no que a estrutura pode oferecer.

Com isso dito, as estruturas oferecem um benefício muito maior do que apenas a eficiência - uma estrutura como Symfony ou Django ou (suponho) o Rails fornece uma convenção que permite que uma equipe se flexione dinamicamente e também permite que clientes ou proprietários de produtos alterem sua equipe sem exigir o novo recurso para reaprender completamente um novo sistema - se eles estiverem familiarizados com a convenção de uma estrutura e essa convenção for seguida, serão muito mais produtivos inicialmente do que de outra forma.

Jonathan Rich
fonte
4

Uma estrutura bem projetada deve ser uma ajuda para o programador, não um obstáculo. Se a estrutura que você usou está atrapalhando demais, sugiro que olhe para uma estrutura diferente. Cada um tem seu próprio estilo de codificação e seus próprios prós e contras.

Dito isto, o framework Zend parece ser muito popular hoje em dia e honestamente? Eu luto para ver por que às vezes. Eu tive que trabalhar com ele no passado e não gostei da arquitetura nem um pouco. A classe Zend_Form é ridiculamente superengenharia, seu sistema decorador é totalmente horrível em uso, e os decoradores vinculam os formulários às visualizações, quebrando um conceito fundamental de POO afirmando que os objetos devem ser fracamente acoplados. Ele também possui muitos códigos implementados como Singletones (que são ruins por motivos bem documentados, por isso não vou reiterar) e o objeto Registry também contribui para incentivar um estilo de codificação desleixado.

Ouvi dizer que o Zend Framework 2 (atualmente em beta) é um produto muito melhor, mas o mau gosto que o Zend 1 deixou na minha boca significa que não tenho pressa em testá-lo.

Ainda assim, neste momento estou apenas reclamando. :) Existem muitas estruturas por aí, cada uma com seus prós e contras, eu sugiro avaliar algumas delas.

GordonM
fonte
3

O que você descreve foi chamado de "complexidade induzida por abstração" no passado. O único artigo sobre gerenciamento é: Gerenciando a complexidade induzida por abstração por David Keppel. Keppel sugere que as estruturas tenham um design que cause complexidade induzida por abstração.

Bruce Ediger
fonte
2

Trabalhar com uma estrutura está ajudando você a acelerar seu desenvolvimento, não reinventando a roda . O Framework também fornece as ferramentas para ajudá-lo a projetar corretamente seu aplicativo (mas não o impede de tomar más decisões de design, por exemplo, acessar o banco de dados diretamente da visualização).

Às vezes, quando você precisa de uma funcionalidade personalizada, pode levar mais tempo para escrevê-la corretamente. Mas se você está constantemente hackeando e encontrando soluções alternativas, está trabalhando contra a estrutura ou a estrutura não se adequa às suas necessidades.

Em resumo, é possível usar um grande quadro para projetos simples (por exemplo, exibir alguns campos de um banco de dados). Para projetos grandes ou complexos, use uma estrutura.

Christian P
fonte
1

Existem vários lados para escrever seu próprio código versus usar um Framework:

O tamanho, o conhecimento básico e a experiência da equipe com a qual você está trabalhando : Se eles nunca usaram uma estrutura ou têm uma idéia de como arquitetar um aplicativo, você é melhor com uma estrutura bem documentada, com muitos exemplos, e vê que você os acelera. acima.

O tamanho do aplicativo : você nunca sabe de antemão como será usado. Então é melhor você estar preparado para crescer e mudar. Sua estrutura, que você deseja codificar em uma noite, pode crescer com as necessidades do gerenciamento? Altere os tipos de campo no banco de dados e leva um minuto ou um dia para implementar, esse é o meu ponto aqui.

A Preparação : Se você usar uma estrutura, poderá começar a projetar o aplicativo em vez de codificar o núcleo do seu aplicativo, use um em que a segurança e a implantação sejam partes importantes, que é o que leva tanto tempo. Toda vez.

Eu sempre argumento com "a gerência" para usar o Symfony2, pois é uma estrutura para o desenvolvimento da web. A gerência pensa que é muito grande, vai custar dinheiro e afastar os programadores à medida que a curva de aprendizado é íngreme.

deslumbrar
fonte
0

As estruturas ainda serão usadas para qualquer idioma na moderna, especialmente para grandes projetos. Quanto maior o projeto, mais importante é a estrutura, para que você saiba onde está a lógica de tudo e cada recurso tem um layout semelhante. Isso facilita a modificação de um projeto e a aprendizagem mais fácil quando você sabe onde procurar todo o acesso a dados, toda a apresentação ou onde as regras de negócios são gerenciadas.

É necessário escolher uma estrutura que se encaixe no projeto; uma solução corporativa requer uma estrutura capaz da empresa. Esse é o problema que você encontrará ao usar o PHP. Muitas (a maioria) estruturas não se destinam a ser usadas em larga escala, mas funcionam bem em sites pessoais menores. Para algo como o sistema de gerenciamento escolar que você mencionou, isso exigirá uma estrutura mais robusta e poderá levar algum tempo para encontrar uma estrutura adequada em PHP.

Ryathal
fonte