Cytat
Taaaak, w idealnej implementacji, która nie istnieje
Istnieje, istnieje. MVC to nie jest jakaś "niepoznana prawda" tylko konkretny opis jak wykonać dane zadanie. Jednak jak słusznie zauważyłeś w środowisku HTTP nie da się jej zaimplementować (model nie może powiadomić widoku (w sensie tego co jest już wyświetlane użytkownikowi) o zmianie swojego status) - o to się czepiać nie będę (chociaż IMO to już kwalifikuje to skreślenia nazwy MVC na rzecz jakiegoś "passive-view-MVC")
Cytat
Oczywiście, że sam kontroler fizycznie nie przekazuje danych z modelu do widoku
Problem w tym, że to co pokazałeś w listingu poniżej tego cytatu to przekazanie danych do widoku przez kontroler z modelu. A kontroler powinien przekazać do widoku tylko model. Ale to jeszcze jest do przeżycia... najgorsze jest to, że uprościłeś: Widoku = szablon (czy to HTML czy PDF to bez znaczenia). A to widok jest odpowiedzialny za całą logikę widoku (sortowanie po kolumnach, paginacja itp.) by na końcu dopiero odpalić sobie jakiś szablon i go wyświetlić.
To co pokazałeś ma naprawdę niewiele wspólnego z MVC. To nie jest coś gorszego... to jest coś
innego.
W jakimś innym wątku bodajże
Zyx całkiem fajnie opisał to.
Cytat
Albo ja czegoś nie rozumiem, albo Ty. (...)
A tutaj widzę że doszło do małego nieporozumienia.
Cytat
Najczęściej użytym wzorcem modelu DB jest singleton (słusznie czy niesłusznie, osobiście uważam, że powinna istnieć tylko jedna instancja obiektu reprezentującego bazę danych).
Pisząc coś takiego sugerujesz zrobienie czegoś takiego:
class Database {
protected __construct() {
$this->db = new PDO();
}
// implementacja Singletona
}
A jak rozumiem chodziło Ci o coś takiego:
class DbManager {
protected
$instances = array();
addInstance($name, Database $db) { $this->instances[$name] = $db; }
getInstance($name) { return $this->instances[$name]; }
// TUTAJ implementacja singletona
}
class Database {
public function __construct() {
///..
}
}
W takim przypadku użycie Singletona jest może nie tyle co wskazane co dopuszczalne i przede wszystkim sensowne.
Jednak co do drugiej części to nie możesz zakazać istnienia takiego modelu:
public function retrieveFriends($id) {
return $this->facebookAPI->getFriendsOf($id); // FB API
}
public function retrieveOne($id) {
return $this->db->select()->where('id', $id); // Lokalna baza
}
public function retrieveSth($id, $def) {
return $this->db['remote']->select()->where('id', $id)->where('def', $def); // Jakaś baza na innym serwerze
}
Zrobiłeś jeszcze chyba jeden błąd (nie mam teraz czasu czytać jeszcze raz) - uprościłeś: 1 model = 1 tabela w bazie. A to nie prawda. Model ma sobą obejmować jakieś dane, które niekoniecznie muszą obejmować jedną tabelę.