Supponiamo che tu abbia un HomepageController
che "suppone di mostrare tutti i blog, gli utenti, la galleria e alcune informazioni riservate ai membri (per gli utenti che hanno effettuato l'accesso)
Normalmente, assomiglia a questo:
<?php
class HomepageController
{
public function index()
{
$blogService = new BlogService();
$data['blogs'] = $blogService->getAll();
$userService = new UserService();
$data['users'] = $userService->getAll();
$galleryService = new GalleryService();
$data['users'] = $userService->getAll();
$data['membersOnlyInfo'] = [];
if ($userIsLoggedIn)
{
$membersOnlyService = new MembersOnlyService();
$data['membersOnlyInfo'] = $membersOnlyService->getTopSecretInfo();
}
Render($data);
}
}
Questa cosa è probabilmente già grassa ma può diventare più grassa ad un certo punto nel futuro. In questo caso, è meglio racchiuderlo all'interno di un "Servizio controller"? Per esempio:.
class HomepageService
{
public function index()
{
$blogService = new BlogService();
$data['blogs'] = $blogService->getAll();
$userService = new UserService();
$data['users'] = $userService->getAll();
$galleryService = new GalleryService();
$data['users'] = $userService->getAll();
$data['membersOnlyInfo'] = [];
if ($userIsLoggedIn)
{
$membersOnlyService = new MembersOnlyService();
$data['membersOnlyInfo'] = $membersOnlyService->getTopSecretInfo();
}
return $data;
}
}
In modo che il controller assomigli a questo:
class HomepageController
{
public function index()
{
$data = new HomepageService();
Render($data);
}
}
C'è un po 'di logica nel primo controller (cioè if ($userIsLoggedIn)
) e poiché i controller non dovrebbero avere alcuna logica di business, immagino che questo abbia senso. È una buona pratica o è eccessivo?
Nota: per semplicità dipendenza, l'iniezione è omessa in questo esempio.