Temat: Dostępna wersja 0.0.3 - manager połączeń do baz danych
Dublować nic nie dublujesz - wydzielasz odpowiedzialność obiektów.
Znaleziona klasa ma wygenerować odpowiedź a nie być odpowiedzią.
Jaka będzie odpowiedź - zależy od logiki w klasie (czy gdzie tam logika mieszka).
System nie jest zainteresowany nagłówkami odpowiedzi ani jej contentem.
Interesuje go tylko otrzymanie takowej z wywoływanego kontrolera.
Wydzielając odpowiedź jako osobną klasę unikniesz powstawania mega-obiektów. Odpowiedź jest ładnie wydzielona i można ją rozwijać niezależnie od pozostałych elementów.
Dobry interfejs odpowiedzi (i/lub klasa abstrakcyjna) pozwolą na przygotowanie dedykowanych rodzajów odpowiedzi.
Przykładowo - nic nie stoi na przeszkodzie by przygotować sobie:
- ResponseRedirect - której podajesz adres na jaki ma być przekierowanie a obiekt sam wybierze sposób przekierowania (nagłowki czy js),
- ResponseFile - która nie tylko prześle odpowiednie nagłówki ale i pozwoli na zarządzanie prędkością transferu, wymusi download itd.
public function downloadFile() {
$File = new File($path);
$Response = new ResponseFile($File);
$Response
->limitTransfer(32)
->forceDownload(true);
return $Response;
}
Czyż to nie jest śliczne i czytelne?
A w indexie robisz tylko wielki try { ... } catch(Exception $e) { echo new Response500('Mega fail!'); }
PS.
Wykonanie exit()/die() wg mnie jest rozwiązaniem tymczasowym i sporym problemem.
Co w sytuacji gdy coś po wygenerowani odpowiedzi ma się jeszcze dziać?
Coś poza kontrolerem? (kompresja, cacheowanie).
Michał Wachowski edytował(a) ten post dnia 06.06.12 o godzinie 18:22