Mi è stato chiesto di ridefinire un po 'di codice spaghetti quasi urlabile nell'architettura orientata agli oggetti.
Ho dei dubbi riguardo a una classe che ho progettato. Ecco lo scheletro della classe:
require_once 'inc/FeaturedCarousel/Carousel.php';
class FeaturedCarousel
{
private $currentCategory;
private $allFeaturedAdvertisers = array();
private $metaData = array();
private $featuredAdvertisersIds = array();
private $dataForDisplay = array();
public function __construct($currentCategory)
{
$this->currentCategory = $currentCategory;
$this->getAllFeaturedAdvertisers();
$this->getAllAdvertisersMetaData();
$this->getFeaturedAdvertisersInCurrentCategory();
$this->getDataForDisplay();
}
private function getAllFeaturedAdvertisers()
{
}
private function getAllAdvertisersMetaData()
{
}
private function getFeaturedAdvertisersInCurrentCategory()
{
}
private function getDataForDisplay()
{
}
public function displayCarousel()
{
new FeaturedCarousel\Carousel($this->dataForDisplay);
}
}
La classe è iniziata in questo modo:
$carousel = new FeaturedCarousel($currentCategory);
$carousel->displayCarousel();
Il ruolo della classe consiste nel preparare i dati per la visualizzazione e quindi visualizzarli utilizzando una classe esterna Carousel
che viene creata un'istanza nel metodo displayCarousel()
.
Potrebbero esserci aspetti importanti che dovrebbero essere rifatti. Tieni presente che ho già implementato tutti i metodi, quindi non è necessario concentrarsi sulla loro implementazione.
Ecco le mie domande -
-
Tutti i metodi necessari per generare i dati per la visualizzazione vengono innescati uno alla volta nel costruttore. Ognuno di questi metodi genera una proprietà privata richiesta dal metodo chiamato next. Pertanto, se uno qualsiasi dei metodi fallisce, non ha davvero senso chiamare i metodi successivi. Come dovrei affrontare questi possibili errori di metodo?
-
Il metodo
displayCarousel()
crea un'istanza di un'altra classe responsabile del rendering effettivo del contenuto HTML. Al momento la classeCarousel
è solorequired
e istanziata nella chiamata al metodo. La classeCarousel
deve essere "iniettata" nella mia classe prima che venga utilizzata?