Ir para conteúdo
Fórum Script Brasil
  • 0

MVC: a escolha [Resolvido]


Frank K Hosaka

Pergunta

O código a seguir é o esquema que eu usei para pegar a opção do usuário. É um código horroroso, não dá para documentar, e nem afirmar que eu criei um "objeto" chamado "escolha".

Trata-se de uma gambiarra e não um MVC.

O problema é que eu não sei onde procurar um código exemplo, onde é possível pegar a opção do usuário.

<?php
session_start();
class escolha
{
    public function __construct()
    {
        if(isset($_GET['escolha']))
        {
            $_SESSION['escolhido']=$_GET['escolha'];
            return header('location:index.php');
        }

    }

    public function mostrarEscolha()
    {
        ?>

        <a href="?escolha=1">Escolha 1</a><br>
        <a href="?escolha=2">Escolha 2</a>

        <?php
    }
}

if(isset($_SESSION['escolhido']))
{
    echo "a opção escolhida foi: " . $_SESSION['escolhido'];
    unset($_SESSION['escolhido']);
    exit;
}
$escolha=new escolha();
$escolha->mostrarescolha();

** importante: esse código só funciona no Windows. No sistema Linux não é permitido você chamar a função mostrarEscolha usando tudo minúsculo, tipo mostrarescolha.

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 1

Isto não é MVC, é uma POG mesmo.

Em PHP, nomes de funções são case-insensitive, mas é uma boa prática manter a consistência para evitar confusão e erros, especialmente se o código for executado em um ambiente Linux.

Tu que gosta da Gemini, cole este prompt lá. Vai te ajudar a entender a estruturar seu MVC de uma forma clara e definitiva.

As Inteligencias Artificiais nunca repetira os mesmos códigos por Prompt, oque apareceu para mim não é o mesmo que aparecera para você, então vá editando, acrescentando mais coisas e gere novas versões, pois ira mudar sempre. Então para evitar confusões. Veja o que mais chegue perto do que você entende e precisa copie e teste.
 

Com base neste codigo abaixo:


<?php
session_start();
class escolha
{
    public function __construct()
    {
        if(isset($_GET['escolha']))
        {
            $_SESSION['escolhido']=$_GET['escolha'];
            return header('location:index.php');
        }

    }

    public function mostrarEscolha()
    {
        ?>

        <a href="?escolha=1">Escolha 1</a><br>
        <a href="?escolha=2">Escolha 2</a>

        <?php
    }
}

if(isset($_SESSION['escolhido']))
{
    echo "a opção escolhida foi: " . $_SESSION['escolhido'];
    unset($_SESSION['escolhido']);
    exit;
}
$escolha=new escolha();
$escolha->mostrarescolha();


Organizar o código em um padrão MVC com autoloader, 
você precisará dividir as classes e funcionalidades em arquivos separados 
e adotar um sistema de autoload que carregará automaticamente as classes necessárias. 
No PHP, você pode utilizar o PSR-4, um padrão de autoloading que utiliza namespaces 
para mapear estruturas de diretórios, as rotas tipos as utilizadas pelo laravel atualmente, 
o arquivo de rotas devera aceitar post e get.

/projeto
    /public
        - index.php
    /src
        /Controller
            - EscolhaController.php
        /View
            - escolhaView.php
        /Router
            - Router.php
        - routes.php
    /vendor
        - autoload.php
    - composer.json

 

Editado por William Duarte
Link para o comentário
Compartilhar em outros sites

  • 1

Obrigado, William, eu sabia que o meu código não é um MVC e sim um POG (Programação Orientada a Gambiarra).

O núcleo do problema no PHP, MVC e Laravel é a gramática, eu não sei o que é responsabilidade, documentação, fatoração, lógica, autoloader,  organização e roteador, enfim estou cansado de receber a mesma orientação, o de que para ser um desenvolvedor preciso estudar, estudar e estudar. Estudar é terrível, dói a minha cabeça.

Tudo o que me resta é o velho método científico da tentativa e erro, faço várias tentativas até conseguir o que eu quero, e não o que é o certo. Voltando ao caso da escolha, o meu novo POG ficou assim:
 

<?php
class escolha
{
    public function __construct()
    {
        ?>

        <a href="?escolha=1">Escolha 1</a><br>
        <a href="?escolha=2">Escolha 2</a>

        <?php
    }
}

if(isset($_GET['escolha']))
{
    return print_r("O usuário escolheu a opção " . $_GET['escolha']);
}
$escolha=new escolha();

Nesse novo POG, eu consegui ficar livre da variável global $_SESSION, acredito que criei um objeto escolha de verdade. Tudo o que o objeto escolha faz é pegar a escolha do usuário. Quem vai pegar a escolha é o controller que chamou a função. Esse é o lado bacana da POO, o da simplificação, mas a minha prioridade não é transformar o meu POG em POO, e sim como estudar o PHP, o Laravel e o MVC. 

Ontem, eu fiquei contente ao descobrir que é possível o Laravel trabalhar com json. Ao invés de usar com json_decode(json_encode etc, a nova gramática do Laravel é bem melhor, assim return (object)["chave":"valor"], mas isso descobri pela força do acaso, não encontrei a resposta na Gemini e nem no labirinto de sugestões do Google.

Ou seja, não estou preocupado com o paradigma do POO, e sim como fazer o meu POG funcionar para mim. Mas sem dúvida as orientações são valiosas. Espero que você continua a me ajudar.

Link para o comentário
Compartilhar em outros sites

  • 1

Não se ofenda com a "POG", é um termo bastante usado rsrsrsrs. Mas a Programação Orientada a Objetos (POO) pode parecer complexa no início, mas sua compreensão abre um leque vasto de possibilidades para resolver problemas de programação. Minha jornada para dominar POO levou anos, enfrentando a falta de materiais que hoje estão acessíveis. Com os recursos atuais e seguindo o roteiro adequado, o processo de aprendizado pode ser muito mais eficiente e gratificante.

Para estudar Programação Orientada a Objetos (POO) do básico ao avançado, você pode seguir este roteiro estruturado:

1. Entendendo o Paradigma Orientado a Objetos:
   - Estude os conceitos básicos de POO: objetos, classes, métodos e atributos.
   - Aprenda sobre os princípios fundamentais da POO: encapsulamento, herança e polimorfismo.
   - Exercícios práticos: Crie classes simples, defina atributos e métodos, e instancie objetos em uma linguagem de programação específica.

https://pt.wikipedia.org/wiki/Programação_orientada_a_objetos

2. Encapsulamento:
   - Aprofunde-se em como os dados são protegidos dentro de uma classe usando modificadores de acesso (público, privado e protegido).
   - Pratique o encapsulamento criando classes que ocultem seus estados internos e exponham apenas os métodos necessários para a manipulação desses estados.

https://www.devmedia.com.br/conceitos-encapsulamento-programacao-orientada-a-objetos/18702

3. Herança:
   - Estude como uma classe pode herdar comportamentos e atributos de outra classe.
   - Entenda a diferença entre herança simples e múltipla (se suportada pela linguagem).
   - Exercícios práticos: Crie hierarquias de classes para entender a herança e o reuso de código.

https://www.devmedia.com.br/arquitetura-de-software-desenvolvimento-orientado-para-arquitetura/8033

4. Polimorfismo:
   - Aprenda sobre polimorfismo e como um objeto pode assumir várias formas.
   - Estude polimorfismo de sobreposição (method overriding) e de sobrecarga (method overloading).
   - Exercícios práticos: Implemente métodos polimórficos em suas classes.

https://www.devmedia.com.br/arquitetura-de-software-desenvolvimento-orientado-para-arquitetura/8033

5. Abstração e Interfaces:
   - Compreenda o conceito de classes abstratas e interfaces.
   - Aprenda a definir contratos de interfaces e como eles podem ser usados para impor uma estrutura em diversas classes.
   - Exercícios práticos: Crie classes abstratas e implemente interfaces em seus projetos.

https://www.macoratti.net/12/06/c_caip1.htm

6. Padrões de Projeto:
   - Estude padrões de projeto orientados a objetos como Singleton, Factory, Strategy, Observer, entre outros.
   - Entenda como e quando aplicar cada padrão de projeto.
   - Exercícios práticos: Implemente padrões de projeto em pequenas aplicações para entender seus usos e benefícios.

https://refactoring.guru/pt-br/design-patterns

7. Princípios SOLID
   - Aprenda os cinco princípios SOLID para um bom design de software orientado a objetos: responsabilidade única, aberto/fechado, substituição de Liskov, segregação de interfaces e inversão de dependência.
   - Analise exemplos de código e refatore códigos que violam esses princípios.

https://medium.com/desenvolvendo-com-paixao/o-que-é-solid-o-guia-completo-para-você-entender-os-5-princípios-da-poo-2b937b3fc530

8. Aplicações Avançadas e Boas Práticas:
   - Estude tópicos avançados como injeção de dependência, programação orientada a aspectos e ORM (Object-Relational Mapping).
   - Aprenda boas práticas de POO e como evitar antipadrões de projeto.

https://medium.com/@eduardolanfredi/injeção-de-dependência-ff0372a1672

9. Projetos Práticos:
   - Desenvolva projetos maiores para consolidar seus conhecimentos, aplicando tudo o que aprendeu.
   - Contribua para projetos de código aberto ou crie seus próprios aplicativos para resolver problemas reais.

10. Continuidade no Aprendizado:
    - Mantenha-se atualizado com as tendências e atualizações nas linguagens de programação orientadas a objetos.
    - Participe de comunidades, leia livros, assista a tutoriais e interaja com outros desenvolvedores.

Este roteiro pode ser adaptado conforme sua linguagem de escolha, seja ela PHP, Java, C#, Python, entre outras. O importante é construir uma base sólida nos conceitos e depois aplicá-los em situações práticas.

Só evite Frameworks como Laravel se nada disso fizer sentido no início. Aprender os fundamentos da POO é crucial antes de mergulhar em abstrações mais elevadas que esses frameworks oferecem. Uma vez que você tenha uma base sólida, entenderá como essas ferramentas simplificam e agilizam o desenvolvimento, mas começar por elas sem compreender a essência da POO pode ser mais confuso do que útil. Assim, foque primeiro em estabelecer um entendimento robusto dos conceitos básicos para depois aproveitar ao máximo as facilidades e recursos avançados que os frameworks proporcionam.

 

Editado por William Duarte
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...