Witam, chciałbym się poradzić w jednej sprawie. Pytanie nie jest najwyższych lotów, raczej podstawy.
Zawsze pisałem tylko proceduralnie, od jakiegoś czasu uczę się obiektówki. Zacząłem przede wszystkim od teorii, znalazłem niejednokrotnie informację, że metoda powinna być odpowiedzialna tylko za jedno zadanie. Tak więc zrobiłem sobie małą klasę i nie do końca wiem czy poprawnie wg. zasady jw. Mógłby ktoś mi to sprawdzić i ewentualnie podpowiedzieć co zmienić? Chciałbym się uczyć dobrych nawyków od samego początku.
Klasę stworzyłem na trzy sposoby. Chodzi mi o klasę Router/ Routertwo/ RouterThree
<?php
class Router
{
protected $getPost;
public function __construct()
{
$this->getPost = new GetPost();
}
public function execute()
{
return $this->existsAction();
}
protected function existsAction()
{
if (($this->getPost->existsGet('action')) && (!$this->getPost->isNullGet('action')))
return $this->actionGet();
else if (($this->getPost->existsPost('action')) && (!$this->getPost->isNullPost('action')))
return $this->actionPost();
else return false;
}
protected function actionGet()
{
return $_GET['action'];
}
protected function actionPost()
{
return $_POST['action'];
}
}
<?php
class RouterTwo
{
protected $getPost;
public function __construct()
{
$this->getPost = new GetPost();
}
public function execute()
{
if (!$temp = $this->existsAction()) return false;
else return $this->$temp();
}
protected function existsAction()
{
if (($this->getPost->existsGet('action')) && (!$this->getPost->isNullGet('action')))
return 'actionGet';
else if (($this->getPost->existsPost('action')) && (!$this->getPost->isNullPost('action')))
return 'actionPost';
else return false;
}
protected function actionGet()
{
return $_GET['action'];
}
protected function actionPost()
{
return $_POST['action'];
}
}
<?php
class RouterThree
{
protected $getPost;
public function __construct()
{
$this->getPost = new GetPost();
}
public function execute()
{
if ($this->existsActionGet()) {
return $this->returnActionGet();
} elseif ($this->existsActionPost()) {
return $this->returnActionPost();
}
}
protected function existsActionGet()
{
if (($this->getPost->existsGet('action')) && (!$this->getPost->isNullGet('action')))
return true;
else return false;
}
protected function existsActionPost()
{
if (($this->getPost->existsPost('action')) && (!$this->getPost->isNullPost('action')))
return true;
else return false;
}
protected function returnActionGet()
{
return $_GET['action'];
}
protected function returnActionPost()
{
return $_POST['action'];
}
}
W klasie Router - w pierwszej jaką stworzyłem jest metoda actionExists, która sprawdza czy akcja wgl istnieje w post/ get jezeli tak to zwraca mi jaka to akcja, a jezeli nie to po prostu false. Czyli tutaj jakby wykonuje dwa zadania, bo sprawdza i ew. zwraca mi jaka to akcja, czy jednak można to jeszcze uznać jako jedno zadanie?
Przy drugiej klasie trochę zmieniłem. Tutaj natomiast ta metoda sprawdza czy istnieje akcja oraz zwraca mi czy jest to w get lub post lub false. Czyli w sumie znowu mi zwraca nie tylko czy istnieje, lecz jeszcze gdzie ona istnieje ta akcja.
W trzeciej klasie to bardziej rozbiłem, bo sprawdzam po kolei czy akcja istnieje w get jezeli tak to weź nazwę akcji z get i tak samo z post. Trzecia klasa wydaje mi się, że jest najbliższa zasadzie jednej odpowiedzialności, aczkolwiek wygląda ona wg. mnie też najbardziej amatorsko.
Jak jest wg. was? Z góry dzięki za pomoc.