Získat jméno tabulky z ActiveRow

m.brecher
Generous Backer | 758
+
0
-

Ahoj,

potřeboval bych poradit od znalců Nette Database. Zkouším, jak získat jméno tabulky z objektu Nette\Database\Table\ActiveRow. Vyzkoušel jsem toto a funguje to:

$tableName = $row->getTable()->getName();  	// kde $row je ActiveRow nějaké tabulky

Metodu Selection::getTable() jsem našel v dokumentaci API Nette Databáze zde https://api.nette.org/…tiveRow.html#…, kde je ale tato metoda označená jako internal.

Mohu bez obav tuto metodu používat, i když je internal, nehrozí v budoucnu, že by nebyla veřejně přístupná? Nebo existuje jiný lepší způsob jak jméno tabulky získat?

Napadlo mne, že by se možná hodilo přidat do veřejného API ActiveRow metodu getTableName(), která by zapouzdřila funkcionalitu getTable()->getName() a bezpochyby by našla svoje použití v praxi.

Díky předem za komentáře.

Robin Martinez
Člen | 89
+
+1
-

je internal, ale je public? Nette pripadne v novych verzich oznacuje funkce jako deprecated, takze bych se asi nebal. Ale treba me nekdo opravi

Edit: za minus diky, ale jak jsem napsal – byl bych rad, aby nekdo dovysvetlil. Nevim, jestli jsem nenapsal kravinu

Editoval Robin Martinez (29. 7. 2022 6:37)

petr.pavel
Člen | 535
+
+2
-

Když je internal, tak ji imho nikdo nebude označovat za deprecated, protože není určena k použití zvenku. Technicky to jde, ale autor to povolil z nouze.

@m.brecher: K čemu potřebuješ vědět, z jaké tabulky je řádka v ActiveRow?

Robin Martinez
Člen | 89
+
0
-

Jasne, nemyslel jsem asi vylozene deprecated (u internal to fakt nedava asi smysl), ale aby casem internal nebyla zaroven zmenena na private (nekoukal jsem, jak se ted pouziva jako public). To jedine me napadlo, ze by se casem stalo

Editoval Robin Martinez (29. 7. 2022 11:33)

m.brecher
Generous Backer | 758
+
+1
-

Ahoj @petrpavel a @RobinMartinez

píšu si takové menší CMSko, kde je několik tabulek s obsahem jako article, category, project apod… a při zpracování provádím abstrakci, kdy se z těchto tabulek získávají záznamy do společného ActivRow řádku $content. Zpracování je společné, ale v jednom místě potřebuji znát z jaké konkrétní tabulky ten řádek je.

Ale ono to jde navrhnout lépe tak, že si název tabulky předám explicitně a nepotřebuji jméno tabulky tahat z ActiveRow objektu.

Potvrzuje se pravidlo, že když je člověk tlačen do nestandartních postupů, je vhodné si projít analýzu a zlepšit návrh struktury kódu. Obvykle jsou tlaky na nestandartní postupy v kódu způsobeny nedotaženou analýzou.

Robin Martinez
Člen | 89
+
0
-

Ac souhlasim s tim, ze to jde navrhnout lepe, tak na druhou stranu zkratka ActiveRow (zatim) nabizi funkci pro ziskani tabulky, takze proc ne?

Kamil Valenta
Člen | 762
+
0
-

Protože internal metoda není součástí veřejného API a sahat se na ni nemá. Nikdo nebude nikdy cítit potřebu držet záruku, že se metoda v rámci refactoringu mlčky nepřejmenuje. Když už na tu metodu sahat, tak ne takto přímo, ale zapouzdřeně přes vlastní objekt, aby se to v případě změny upravilo na jednom místě.
Ale: také si myslím, že ve chvíli, kdy ActiveRow vznikala, muselo být jméno tabulky známé. A od té chvíle si ho s sebou můžu tahat…

Robin Martinez
Člen | 89
+
0
-

s tim souhlasim