Venho tentando há muito tempo envolver minha cabeça em torno de OOP. Eu vejo suas vantagens. Eu li muitos tutoriais e assisti a uma quantidade igual de vídeos sobre o assunto. Eu recebo os exemplos de animais / gatos / cães, os exemplos de carros / unidades. O que estou enfrentando é como aplicar esses conceitos em um aplicativo do mundo real. Então, eu decidi construir um usando OOP.
Não estou pedindo ajuda com sintaxe ou escrevendo código específico - posso encontrar isso na documentação e pesquisando nos fóruns etc. O que realmente preciso é de alguma orientação e um empurrão na direção certa de vez em quando. Existem programadores experientes dispostos a me orientar?
Como meu projeto de aprendizado, gostaria de criar um "aplicativo da web" simples para classificados. Algo semelhante ao Craigslist, mas bastante diluído em termos de escopo. Eu gostaria de usar PHP5 e MySQL, porque estou familiarizado com eles.
Digamos que existem apenas dois casos de uso:
- Publicando algo para venda
- Navegando / procurando algo para comprar
Quais "coisas" devem ser objetos? Eu posso imaginar que cada item poderia ser um objeto, mas em que momento? E porque?
Por exemplo, o usuário preenche o formulário "lançar item à venda"; esse formulário deve se transformar em um objeto que é passado para outro objeto que insere os valores em um banco de dados?
E quando outro usuário está navegando e solicita a visualização de todos os itens da categoria C? Faz sentido que, sempre que o aplicativo precise se conectar ao banco de dados, ele crie um objeto de banco de dados, obtenha um monte de objetos de itens e os exiba na página? ... escrever isso certamente me faz perceber o quanto eu ainda sou ignorante sobre OOP. Por favor me ajude a consertar isso.
Se, na sua opinião, esse não é um bom projeto para começar a entrar no OOP, fique à vontade para sugerir outra idéia!
fonte
Respostas:
Sinceramente, acho que o conselho aqui tem sido terrível para os novos aprendizes de OO até agora. Não é uma boa idéia começar imediatamente a pensar em objetos como representações de uma instância específica de uma "coisa" definida por alguma classe. É melhor pensar neles como componentes compartimentados de uma máquina que interagem um com o outro, mas não os internos. Cada um desses componentes mantém o estado
Se você deseja usar um ORM (mapeamento relacional de objetos) para interações com banco de dados, qualquer estrutura que você use ou crie provavelmente terá alguns objetos rasos que representam tabelas, que provavelmente são coleções de "coisas", mas eu não gosto de ORMs pessoalmente , e não acho que eles representem necessariamente práticas ideais de OO, mas são populares para aplicativos da Web grandes.
Além disso, você provavelmente terá alguns componentes importantes que a máquina de aplicativos da web precisa para executar, como uma ou mais conexões com o banco de dados (você pode criar uma classe que mantém uma conexão e executar consultas preparadas -
PDO
é ótimo por si só , mas eu o resumiria) e talvez um sistema de modelos para suas visualizações. Você também pode querer que seus controladores sejam objetos PHP. Se você tiver um formulário para preencher, poderá ter um objeto que mantenha os valores do formulário para P / R / G, um token de proteção CSRF e possa executar a validação em suas entradas.Você não deve tentar procurar por "coisas" para se transformar em objetos ao construir o design do aplicativo da web e o gráfico de objetos. Em vez disso, você deve pensar nos componentes lógicos que se reúnem para criá-lo. Não acho que você deva tentar forçar isso, e isso deve ocorrer naturalmente, mas é muito difícil de fazer corretamente e você definitivamente terá que mudar algumas decisões de design ao longo do caminho.
Meu conselho final é este: composição sobre herança é o caminho a percorrer.
fonte
Aqui está como você pode usar o OOP para comprar e vender seus animais de estimação, a mesma metodologia pode ser usada para vender carros ou aviões;
fonte
A pedido do OP, compartilharei meu código do livro de visitas.
Classe de mensagem:
Classe de Objeto de Acesso a Dados da Mensagem:
index.php
Renomeei algumas das variáveis e função para fazer sentido para você (traduzido do holandês para o inglês: P), para que você possa encontrar algumas frases estranhas às vezes porque fiz uma substituição rápida etc. Divirta-se com isso. Além disso, este não é o código inteiro, porque isso resultaria em eu postar 20 arquivos no código: P
fonte
Conforme mencionado por Explosion Pills, em um aplicativo complexo, a maioria dos objetos está relacionada a componentes de aplicativos (por exemplo, conjuntos de conexões de banco de dados, comandos, estruturas de dados como hashmaps) e não a entidades do mundo real (como cartão de embarque, fatura ou arquivo mp3). ) Existem muitos bons livros sobre padrões de design que mostram maneiras pelas quais as pessoas resolveram muitos problemas recorrentes nessa área. O livro do GOF, como é conhecido, é completo, mas muito seco; os padrões de design do Head First podem ser mais acessíveis.
Em termos de análise e design do mundo real. Muitas vezes, é útil pensar em termos de substantivos e verbos. Por exemplo, uma biblioteca de empréstimo de vídeo (agora obsoleta?) Pode ter as seguintes coisas / substantivos:
Em termos de verbos:
Eles podem ser transformados em classes com operações (faz muito tempo que eu fiz PHP, então evitarei):
É preciso muita prática e brincadeiras. A melhor coisa a fazer é ficar preso e aprender com os projetos com falha. Na minha opinião, OO é algo que você pode continuar aprendendo e desenvolvendo ao longo da sua vida (não é fácil e não há soluções perfeitas para nada). Um bom design geralmente é iterativo; portanto, tente experimentar algumas idéias diferentes para o seu webapp "Lista de Craig".
fonte
A melhor coisa a fazer é encontrar uma maneira de se concentrar no núcleo do seu aplicativo - "post", "user", "post :: FindByName ()", "user-> Validate ()" etc., e não se preocupe muito sobre o encanamento - como colar postagens em tabelas do banco de dados, como manter a exibição de uma postagem consistente entre pesquisas diferentes e como colar o formulário "inserir postagem" em um registro do banco de dados.
Felizmente, existem muitas estruturas que fazem isso por você; o paradigma dominante nos aplicativos da Web OO é "Model-View-Controller", também conhecido como MVC ; no PHP, existem várias estruturas MVC prontas para uso que você pode usar.
Embora isso expanda sua necessidade de aprender - agora você precisa aprender sobre MVC e OO - significa que seus esforços de OO são restritos principalmente à camada "Modelo", que representa seu domínio de negócios; é aí que o OO é mais natural e expressivo. A maioria das estruturas MVC permite que você defina sua camada "modelo" e crie automaticamente um site em torno dela usando uma técnica conhecida como andaime - dessa forma, você obtém uma maneira rápida de experimentar diferentes implementações para o seu modelo de domínio, sem tendo que desfazer todo o encanamento.
fonte