DataGrid a ta „spravna“ vyjimka

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
hurvajs
Člen | 86
+
0
-

Ahoj, mozna asi spise dotaz na Romana Sklenare, ale pokud by nekdo vedel, muze take odpodedet… ;-)

Mam trosku problem s vyhazovanim te spravne vyjimky (je mi jasne, ze DataGrid je zalozeny na dibi a jiny datasource neumi), ale i tak se mi trosku prici rozmum s tim, ze napr. pri chybnem SQL vyhodi DibiDriverException. Z vyse uvedeneho je to samozrejme dobre, ale dle meho soudu by v MVP mel model do presentru vyhazovat pouze vyjimku zavyslou na modelu – protoze me v presenteru v podstate nezajima, jakym zpusobem se data ziskani – jestli pres dibi / RPC apod.

Je nejaka moznost, pri soucasnem DataGridu, abych ziskal vyjimku, ktera bude v zavislosti na modelu?

Napr.:

<?php
// UserPresenter
$grid = new DataGrid($name);
try {
    $grid->bindDataTable(UserModel::getInstance()->getList());
} catch (UserModel_Exception $e) {
    ...
}


// NewsPresenter
$grid = new DataGrid($name);
try {
    $grid->bindDataTable(NewsModel::getInstance()->getList());
} catch (NewsModel_Exception $e) {
    ...
}
?>

Samozrejme mohu prislusne upravit DataGrid nebo zachytavat obecnou vyjimku, ale nezda se mi to „ciste“.

romansklenar
Člen | 655
+
0
-

V rychlosti – nejspíše ne. DataGrid využívá DibiDataSource aby byl co nejjednoduchší a nevyžadoval od programátora žádné speciální funkce a ten tak měl volné ruce. Aby toto šlo, musel bych stanovit nějaké rozhraní modelu a to všem vnutit. Výsledek by byla akorát především zpětná nekompatibilita a hromada dotazů typu „mě to nejede“. Potomek DibiDataSource tady nejspíš ničemu nepomůže, protože výjimka je vyhozena až když se dotaz provede, takže by se to muselo nejspíš složitě odchytávat na několika místech.

hurvajs
Člen | 86
+
0
-

V pohode, uz jsem si pretizil DataGrid. Je jasne, ze by tam musel existovat obecny DataSource. Ale i tak jsem zjistil, ze plne nevyhovuje mym predstavam. Nicmene, dobra prace Romane.