Wiele frameworków implementuje wzorzec korporacyjny Model-View-Controller (MVC). Chciałem zagadnąć o jednej z tych warstw, a dokładniej o "modelu". Problem omawiam na przykładzie frameworka "Zend Framework", ale jest na tyle ogólny (a raczej bardziej koncepcyjny), że nie należy sugerować się konkretnym rozwiązaniem.

W "Zend Framework" zastosowano wzorzec Table Data Gateway oraz Row Data Gateway. W związku z tym zastanawiam się jak zorganizować modele, by podzielić warstwę modelu na dwie mniejsze: warstwę logiki biznesowej i warstwę danych.

Jako wzorzec logiki dziedziny w warstwie logiki biznesowej chciałbym zastosować wzorzec Domain Model dla obiektowego odwzorowania elementów czy pewnych czynników, które będą zawierać dane i czynności, np.:

  1. <?php
  2. $firma = new Firma();
  3. $firma->nazwa = "Moja firma";
  4.  
  5. $katalog = new Katalog();
  6. $katalog->nazwa = "Moje ulubione firmy";
  7. $katalog->dodajFirmeDoKatalogu($firma);
  8. ?>


Natomiast jako wzorzec architektury źródła danych w warstwie danych... no właśnie, co? Martin Fowler w swojej książce "Patterns of Enterprise Application Architecture" proponuje jako najrozsądniejsze rozwiązanie użycie wzorca Data Mapper:

  1. <?php
  2. $mapper->update($katalog);
  3. ?>


Chciałbym jednak wykorzystać bibliotekę "Zend_Db_Table" implementującą wzorce Table Data Gateway i Row Data Gateway. I teraz jak się za to zabrać? A druga sprawa jak zorganizować strukturę katalogów dla takiego podziału modelu w aplikacji?