Cytat
1) Zaszywasz w szablonie nazwę klasy, która będzie wykorzystywana. Zaszywasz też pewnie w jakiś sposób ścieżkę do pliku z klasą, bo trzeba ten plik wczytać. Chyba że połączyć to z autoloaderem... w każdym razie takie ustawianie na stałe nazw klas jest złe, bo uniemożliwia późnijesze dziedziczenie, zabawę z interfejsami itd. Wzrasta coupling, przeciwieństwo dependency injection.
Nazwa klasy jest wydobywana z szablonu za pomocą ClassLocator-a (cyli nie w $klasa->zmienna nie $klasa nie musi być nazwa zmiennej, locator ja na jej podstawie określa oraz określa gdzie tej klasy szukać)
Cytat
2) Nie możesz mieć dwóch obiektów tej samej klasy zwracającej inne dane (bo mających inny stan). Chociaż z tego co zrozumiałem, obiekt wymieniony w szablonie byłby swego rodzaju kontrolerem lub fasadą, która wywołuje inne obiekty. Więc mogę się mylić.
OK Zgadza sie;-) Wiec dodałem:
{obj $nazwa_klasy=>$nazwa_obj} //do locatora
i terz mozna sie odwolywac do utworzonego obiektu:
{$nazwa_obj->zmienna}
w razie gdy system uznaje że obiekt $nazwa_obj jest utworzony korzysta z niego, w przeciwnym razie tworzy go. Dodatkowo teraz mozna i tak:
{obj $klasa=>$objekt($ilosc)}
;-) Ale to w planach - nie wiem czy jest sens;-)
Cytat
3) Szablon przejmuje rolę kontrolną. Nie chcę pisać "rolę kontrolera", żeby nie wdawać się w argumenty o MVC. Ale fakt, że od szablonu tak naprawdę się wszystko zaczyna, nie podoba mi się. Co się stanie, gdy wystąpi krytyczny błąd? Co się stanie, jeżeli trafi się warning? Normalnie, można byłoby bez problemów umieścić komunikat w szablonie. Tutaj nie można, bo szablon już się częściowo wykonał i jest po ptokach.
Nie do końca. Zawsze w razie wystąpienia błędu można zawołać innych szablon. Szablon zostaje wyświetlony dopiero po napotkaniu jego końca - nie jest tak jak to wygląda najczęściej wysyłany partiami do przeglądarki. W razie wystąpienia błędu (wyjątek etc.) można wyświetlić inny szablon - po napotkaniu wyjątku, wyświetlanie jest zaniechane. Mam nadzieje że napisałem w miarę jasno;-)
Dodatkowo klasa zwracająca dane może dowolnie dziedziczyć - ważne tylko żeby posiadała odpowiednie metody.
Cytat
4) Nie wydaje mi się, aby takie rozwiązanie dawało jakieś oszczędności. Owszem, "nie ładujesz do szablonu zbędnych danych". Ale jeżeli mówimy o obiektach (a taki np. Smarty na swój sposób też wspiera obiekty), to nie wyobrażam sobie, aby ktoś "niechcący" lub niepotrzebnie assignował do szablonu zupełnie niepotrzebny obiekt. Niepotrzebny string - pewnie się zdarza. Ale cały obiekt - bez przesady. Gdzie tu więc oszczędność?
Dla mnie wygoda - klasy i tak mają najczęściej już metody get. Dodatkowo szablon nie robi nic poza proszeniem o dane. A czy to jest niezgodne z MVC? Z tego co się orientuje widok może poprosić o dane sam bez pośrednictwa kontrolera.
A przecież widok i tak się nie wywoła sam - to już może robić kontroler.
Pozdrawiam
Marcin Staniszczak