- Strona dla użytkowników (frontend)
- Logowanie - jeśli jest niezalogowany, musi zalogować się (jak na Naszej Klasie)
- Zobacz listę ankiet przeznaczonych dla ciebie (wybranych przez admina).
- Wypełnij ankietę - czyli formularz.
- Zakończ wypełnianie (w międzyczasie odpowiedzi mogą iść na serwer AJAX-em)
- Panel admina - konta adminów niezależne od użytkowników
- Lista ankiet
- Dodaj/edytuj/usuń ankietę
- Zapisz pytanie ankiety (AJAX)
- Dodaj/edytuj/usuń użytkownika
- Opcje i inne podstrony
Aplikacja wykorzysta następujące komponenty:
- PDO dla MySQL
- Klasę do wyświetlania szablonów w formacie XSL
- Inne klasy - może do autoryzacji i innych celów
Powstają pytania:
- Jak rozwiązać podział na panel admina (backend) i stronę dla użytkowników (frontend)?
- Ile powinno być prezenterów? Czy 1 podstrona (np. edytuj ankietę) to osobny prezenter, np. PokazAnkietePrezenter, FormAnkietyPrezenter, ListaUzytkownikowPrezenter, WypelnijPrezenter gdzie akcje zależą od danych GET/POST? Czy stworzyć mniej, ale bardziej ogólnych prezenterów, np. AnkietaPrezenter z metodami wypelnij(), zakoncz(); w panelu admina: AnkietaPresenter z metodami dodaj(), edytuj(), pokaz(), usun(), pokazListe()... Akcje zależą od URL i danych GET/POST.
- Ile modeli? Czy 1 tabela w bazie = 1 model? To niewygodne, bo często trzeba łączyć kilka tabel na raz.
- Jak powinien wyglądać idealny model? Pola w tabeli = pola w klasie? W złączeniach tabel pojawią się pola z wielu tabel. Na pewno łatwiej pobrać dane do tablicy w obiekcie lub po prostu zwrócić prezenterowi.
- Jak prawidłowo powinny przepływać dane w aplikacji o takiej strukturze? Szukam dobrych przykładów.
- Jak rozwiązać problem zmiennych globalnych? Wzorzec Rejestr? A może tak przekazywać obiekty między warstwami tak, aby nie używać rejestrów ani singletonów? Przykłady: system szablonów, baza, autoryzacja - one są tworzone raz w index.php. **
- Wykrywanie błędów w formularzu - należy do prezentera czy modelu? Niby model powinien dbać o poprawność danych, ale na błędy powinien reagować prezenter.
- Obsługa błędów typu "ankieta nie istnieje" - metoda w modelu ma zwracać false, null, pustą tablicę czy wyrzucić wyjątek, np. DoNotExistException?
** Czy to MVC, czy MVP, wstrzykiwanie zależności do modelu nie jest najlepszym wyjściem. Przykład: baza danych. Kontroler i widok mają nie wiedzieć o bazie, a trzeba by na początku im wstrzyknąć obiekt PDO. Jeśli zastosujemy wzorzec Rejestr, uzależniamy modele od konkretnych rozwiązań - zakładamy, że klasa Registry istnieje i działa tak, a nie inaczej. Tak samo klasa nie musi udostępniać Singletonu (zakładamy wykorzystanie czystego PDO).