Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal, eu estou iniciando na Orientação a Objeto, na realidade eu já estou introduzido na Orientação a Objetos, só que mesmo lendo vários artigos, tentando praticar, sempre me resta dúvidas. Eu gostaria de fazer algumas perguntas e quem poder me responder, serei grato.
Certa vez eu fiz uma leitura em uma postagem bem extensa onde várias pessoas participaram, onde um usuário perguntou como pensar orientado a objetos. Isso já foi/é também um problema para mim, mas então o João neto respondeu que antes de qualquer coisa a gente deve conhecer o problema e fazer com que o objeto tenha uma responsabilidade e saiba resolver esse problema (responsabilidade).
Eu estou fazendo um sistema, mas para mim ele NUNCA está bom, sempre acho que a orientação a objetos que eu tentei aplicar fugiu do sentido da orientação a objetos e fiz um macarrão em um único método.
A primeira pergunta é: Mesmo eu conhecendo o problema, sabendo o que eu devo fazer, qual é o conceito que vocês usam para criar os métodos correto, fazer essa divisão e evitar esse macarrão.
O sistema é simples, ele tem que pegar a url e fazer uma divisão em partes e cada parte dessa url eu chamo de um nome, por exemplo (como um router MVC):
www.meusite.com.br/controller/method/action/arg
O objeto pegaria a url apenas na parte /controller/method/action/value e faz uma separação, onde essa separação define por "/" cada parte da url, por exemplo:
controller = O Controller
method = O Method
action = O Action
arg = O Argument (arg)
Nisto eu fiz o seguinte, criei um contruct comum e dentro do construct eu chamei um método privado que eu criei chamado split_uri();
e dentro do método privado split_uri(); eu fiz a separação de cada parte da url e de acordo com que eu fazia isso, eu setava algumas variáveis globais (propriedades) determinadas.
e depois em cada método como get_controller() eu retornava o valor da variável global (propriedade).
<?php
class MVCRouter
{
private $controller;
private $method;
private $action;
private $arg;
public function __construct()
{
$this->split_uri();
}
private function split_uri()
{
$url_splitted = preg_split("[\\/]", $_SERVER["REQUEST_URI"], -1, PREG_SPLIT_NO_EMPTY);
$this->direction = (isset($url_splitted[0]) ? $url_splitted[0] : "index");
$this->handler = (isset($url_splitted[1]) ? $url_splitted[1] : "index");
$this->action = (isset($url_splitted[2]) ? $url_splitted[2] : "index");
$this->arg = (isset($url_splitted[3]) ? $url_splitted[3] : "");
}
public function get_controller()
{
return $this->controller;
}
private function get_method()
{
return $this->method;
}
public function get_action()
{
return $this->action;
}
public function get_arg()
{
return $this->arg;
}
}
Eu sei o que ele tem que fazer, e tudo mais, mas na hora da aplicação, tento colocar a responsabilidade no objeto que é de pegar a url, dividir em partes e ter métodos da interface.
Eu também tento sempre seguir os principios da programação como DRY, KISS e tudo mais, mas ás vezes o problema sempre aparece. Por exemplo, nesse mesmo sistema eu tenho um problema, e eu percebi que eu repeti o código 3 vezes, mas porque existe uma verificação 3 vezes e a cada verificação eu faço uma repetição de código, o que muda em cada verificação if, elseif e else são pequenas linhas de código, funciona como um switch, onde dependendo de cada resultado eu faço uma setagem de 3 variáveis globais, mas eu percebi que eu gerei uma repetição.
Eu gostaria de saber o que vocês pensam antes de definir os métodos... é uma pergunta até meio sem nexo, mas é bem complicado de se explicar assim, porque vejam meu código, eu sabia o problema, mas os únicos métodos que veio na mente para definir foram esses.
O que me deixou achando que eu sai dos principios da orientação a objetos nesse código foi o método privado que eu criei e eu chamo a execução dele no construct do sistema, por isso eu achei que ficou bem estranho.
Obrigado gente;
É uma situação bem complicada, mas vou tentando deixar mais fácil para todos entenderem e tentar resolver isso.
Pode ser também que eu sempre acho que o código está ruim porque eu sou um cara ultra metódico, de besço mesmo, e isso as vezes me f**.
Carregando comentários...