Suportă PHP modelul MVP? (Programare, Php, Asp.Net, Mvp, Modele De Design)

Ven a intrebat.

Există o mulțime de exemple care explică modelul MVP folosind ASP.NET, dar nu am găsit nimic folosind PHP.

Sunt programator PHP și vreau să știu de unde pot obține exemple de tip MVP în PHP?

Comentarii

4 răspunsuri
Yang

Răspunsul scurt este: Da, PHP are.

(Notă, nu este exact MVP așa cum a fost descris în lucrarea originală, ci o variație pentru web)

Diferența dintre MVC și MVP este că, o vizualizare este total pasivă și nu este conștientă de stratul de model. În timp ce în MVC aceasta nu este pasivă și conștientă de nivelul modelului. În mod corespunzător MVP, , View clasa (dacă este), de asemenea NU TREBUIE să implementeze un constructor.

Un exemplu tipic de MVP va fi format din aceste părți:

  1. Stratul de acces la date (DataMapper, ORM etc.)
  2. Logica de afaceri (cum ar fi validarea și calculele)
  3. Clasa de vizualizare pasivă (ar putea fi un șablon, dar ar fi mai bine să rămânem la o clasă)
  4. Prezentatorul care face legătura între model și vizualizare

Un exemplu de implementare a prezentării Model-View-Presenter cu PHP

Notă: În lumea reală, un model nu este o clasă, ci un strat de abstractizare, care conține o mulțime de clase pentru a gestiona logica aplicației. L-aș numi „Model” în scop demonstrativ.

class Model
{
   public function getSomeStuff()
   {
       return array('foo' => 'bar');
   }
}


class View
{
   public function render($path, array $vars = array())
   {
      ob_start();
      extract($vars);
      require($path);
      return ob_get_clean();
   }
}



class Presenter
{ 
     private $model;

     private $view;

     public function __construct(Model $model, View $view)
     {
         $this->model = $model;
         $this->view = $view; 
     }

     public function indexAction()
     {
        $data = $this->model->getSomeStuff();  

        // Variables are set now, render the HTML
        // And returns as a string
        return $this->view->render('path/to/template.phtml', $data);
     }
}

Fișier: template.phtml

<!DOCTYPE html>
<html>
<head>
  <title>...</title>
</head>

<body>

  <?php foreach($vars as $key => $value): ?>
      <p><?php echo $key; ?> : <?php echo $value; ?></p>
  <?php endforeach; ?>

</body>
</html>

Și utilizarea este:

$model   = new Model();
$view    = new View();

$presenter = new Presenter($service, $view);

echo $presenter->indexAction();

Rețineți că acesta este un exemplu foarte simplificat. În scenariul din lumea reală, orice aplicație bazată pe MVP TREBUIE să implementeze, de asemenea, lucruri precum: Router, SPL class autoloader.

mario

Atât MVP, cât și MVC sunt de fapt destinate aplicațiilor GUI. Cele mai multe cadre PHP folosesc „MVC” mai mult ca un cuvânt la modă. Implementarea reală cu modele mute (doar baza de date), vizualizări non-active (= șabloane) și controlori de orchestrare se potrivește de fapt deja cu MVP. Iar din punct de vedere funcțional, controlorii funcționează oricum adesea ca prezentatori, transmițând date din modele în vizualizări. (În MVC adecvat, modelul și vizualizarea interacționează mai mult, vizualizarea fiind de fapt componenta activă).

Dar, oricum, există câteva cadre care sunt de fapt conștiente de terminologia și modelul mai nou.

Comentarii

  • Primul link de la lionframwork.org și Openlight duce la o pagină care în prezent nu mai există. –  > Por Julian Moreno.
  • @JulianMoreno Mulțumesc pentru notă! Link-uri actualizate cu versiuni de arhivă pe internet. –  > Por mario.
Poelinca Dorin

Verificați această bibliotecă Mutant Vole PHP

Antonio

După părerea mea, Lion Framework (www.lionframework.org) este cea mai matură implementare a MVP din zilele noastre.