Nová podoba jmenných prostorů: finalizace

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
David Grudl
Nette Core | 8099
+
0
-

Restrukturalizace jmenných prostorů představuje podstatný zásah do podoby frameworku. Ačkoliv bude provedena s maximálním důrazem na zpětnou kompatibilitu, tak další podobné změny už nejspíš nebudou možné. Proto je potřeba vše dobře zvážit.

https://github.com/…e/namespaces

Dal jsem na GitHub větev, kde jsou soubory rozmístěny do adresářů tak, jak by měly být umístěny ve jmenných prostorech (jejich obsah je zatím nezměněn). V první fázi předkládám k diskusi vše kromě Nette\Application. Nic není definitivní. Pokud tedy máte jakékoliv (konstruktivní!) připomínky, napište je hned, nebo navždy mlčte :-)

Filip Procházka
Moderator | 4668
+
0
-
  • Json, Image, ArrayList a DateTime53 bych navrhoval přesunout do Nette\Types a klidně i String, a Html
  • Souhlasím s LM, že User a IUser by lépe pasovali do Nette\Security
  • složka Support ve mě vyvolává hrůzu, měli byjsme vymyslet něco lepšího…

pár návrhů: https://github.com/…907de07361a5 (diskutujeme tady privátně a pár věcí jsem ještě přešoupal :))

Editoval HosipLan (4. 2. 2011 8:59)

h4kuna
Backer | 740
+
0
-

Myslím si že složka ComponentModel není vhodně pojmenovaná, člověk si může myslet že v tom jsou třídy které bude dědit pro model v aplikaci nebo používat v modelu. Což komponenty jsou vytvářeny v továrničkách a továrničky v presenteru nebo vlastní komponentě xyz která si bude zase pracovat se svým modelem, ale model by měl být nezávislý na presenteru/controleru. Proč není jen Component?

Editoval matata (4. 2. 2011 8:40)

Honza Marek
Člen | 1664
+
0
-
  • IRouter bych dal do namespace Nette\Application\Routers, to samé u podobných případů. Vždyť to přece patří k sobě.
  • Co bude po zrušení configu načítat konfiguraci?
  • Namespace Core se mi hrubě nezamlouvá. Ty třídy by měly být podle mě v namespace Nette.
  • Subjektivně se mi víc líbí Debug než Diagnostics, jednotná čísla místo množných, ale to jsou detaily.
  • Jinak výhrady buď nemám nebo jsem si něčeho nevšiml :)

HosipLan

  • Nette\Types né, copak vyjmenované třídy jsou nějaké (neřkuli primitivní) typy?
  • Kde je složka support, o které mluví HosipLan?
h4kuna
Backer | 740
+
0
-

Honza Marek napsal(a):

  • Kde je složka support, o které mluví HosipLan?

mezi Security a Templates

Filip Procházka
Moderator | 4668
+
0
-

Honzo, pokud vezmeš v úvahu, že všechny třídy jsou v podstatě jenom různé typy a tohle jsou třídy, které obsahují, nebo zapouzdřují nějaký objekt, třeba resource obrázku, pole, cokoliv, pak ano, podle mě jsou to Typy :)

Jenom tam trochu nesedí některé třídy, které neobalují, ale jenom zpracují a vrátí výsledek (Json), ale pořád je to vhodnější než Support :)

Jinak jak říkají tady kolegové a někteří další, proč by všechno muselo být v namespace? nemůžou se některé třídy vyčlenit zpátky do Nette\ ? Čemu tam vadí?

Editoval HosipLan (4. 2. 2011 11:27)

Ondřej Brejla
Člen | 746
+
0
-

Support je opravdu podivný název.

  • vytáhl bych NeonException, NeonParser, Tokenizer a TokenizerException (+ co s nimi evidentně souvisí) do Nette\Neon (vhodnější jméno mě nenapadá, ale myšlenka je snad jasná)
  • vyrobil bych Nette\Utils a do něj nasypal ArrayTools, ArrayList, Callback, DateTime53, Finder, Html, Image, Json, JsonException, Paginator, SafeStream, String, Tools – možná jsem na něco zapomněl, ale myšlenka je snad taky jasná…
  • exception.php a shortcut.php bych přesunul do Nette, jedná se o věci, které jsou používány kdekoliv napříč celým fw…
  • stejně tak Framework bych přesunul do Nette namespace…Nette\Framework je imho mnohem intuitivnější, než Nette\Whatever\Framework
  • Object bych asi šoupnul taky do hlavního Nette a ObjectMixin do jakéhosi Nette\Internal? Pokud je to classa pouze k interním proceům, nevím, jestli s ní někdo nějak pracuje…
  • kam s IFreezable, FreezableObject to netuším…možná také do Nette\Internal…ale pokud to někdo používá, těžko říct…
  • RegexpException tam, kde se používá…nevím kde všude. Pokud na různých místech, pak netuším…
  • Nette\Support bych tedy zrušil…

V těchto prostorech bych asi zmíněné třídy hledal já…jinak ostatní členění se mi zdá ok.

Snad až na zmíněné IUser a User…asi bych je hledal v Nette\Application…User ve mně evokuje „uživatele aplikace“, takže asi tak :-)

Editoval Ondřej Brejla (4. 2. 2011 11:39)

redhead
Člen | 1313
+
0
-

Ondřej to vystih pefrektně! (Java umí krásně učit, jak členit projekt, že? ;) )

David Grudl
Nette Core | 8099
+
0
-

Zapomněl jsem napsal důležitou věc: Nette\Object, Nette\Framework (a klidně další věci z adresáře Support/Core) chci nechat v namespace Nette.

K reakcím:

  • ad ComponentModel: je to vhodné pojmenování, třídy nejsou vázané na žádnou vrstvu, prostě jde o obecný komponentový model
  • ad User: ten rozšiřuje Session, nikoliv Security. V Application by teoreticky být mohl, nicméně je použitelný i bez něj (otázka, jestli k tomu přihlížet)
  • ad Support: no klidně vymyslete něco lepšího. Ale pokud Tools nebo Utils, tak se musí něco udělat s třídou Tools. Asi zrušit. (Types fakt ne…)
  • exception.php a shortcut.php nesouvisí s namespaces
  • ad Internal: navrhoval jsem Core, ale nedokážu najít hranici, co patří do Internal/Core a co do Tools/Support/Utils, takže vhodnější bude asi jen jeden prostor
Ondřej Brejla
Člen | 746
+
0
-

Třídu Tools bych rozdělil na třídy:

  • DateTimeUtils – konstanty a createDateTime
  • FileUtils – detectMimeType a detectMimeTypeFromString
  • ConcurrentUtils – enterCriticalSection a leaveCriticalSection.

Funkce iniFlag, defaultize a compare bych zahodil…ale asi proto, protože jsem je nikdy nepoužil…někdo ano?

Jinak bych teda byl pro Nette\Utils. Do Nette\Internal by asi měly patřit třídy, které se opravdu používají jen interně…tzn. nikde se nemluví o tom, že by bylo potřeba je dědit, překrývat metody, atd…nedokážu posoudit, které všechny to mohou být, ale ObjectMixin je, řekl bych, jasný adept.

Když koukám na Core, tak do Nette\Internal by asi také měly patřit iterátory…s těmi se běžně určitě nepracuje…

Editoval Ondřej Brejla (4. 2. 2011 16:45)

LM
Člen | 206
+
0
-

David Grudl napsal(a):

  • ad User: ten rozšiřuje Session, nikoliv Security. V Application by teoreticky být mohl, nicméně je použitelný i bez něj (otázka, jestli k tomu přihlížet)

Implementace ano, ale interface IUser, v CLI skriptech je často potřeba kvůli ověření práv uživatele přihlásit a proč na to používat třídu z prostoru Nette\Web, zvlášť když používá session a cookie.

David Grudl
Nette Core | 8099
+
0
-

To je pravda, CLI nám kazí plány :-)

Ondřej Brejla napsal(a):

Třídu Tools bych rozdělil na třídy:

Pokouším se tu mršku už rok zrušit a ona mi místo toho roste! Ale jasně, nějak se s ní vypořádám.

Patrik Votoček
Člen | 2221
+
0
-

Předně Support WTF?

Zapomněl jsem napsal důležitou věc: Nette\Object, Nette\Framework (a klidně další věci z adresáře Support/Core) chci nechat v namespace Nette.

U „Support“ to nechápu u „Core“ to naopak chápu.

Když koukám na Core, tak do Nette\Internal by asi také měly patřit iterátory…s těmi se běžně určitě nepracuje…

ehm?

  • Co bude po zrušení configu načítat konfiguraci?

Parser danného formátu: viz https://forum.nette.org/…nette-config#… bod 3

Nette\Types double maybe triple WTF!?

  • Nette\SupportNette\Utils
  • Tools bych rozsekal protože Nette\Utils\Tools je takové mno nevím.
  • User, IUser do Nette\Application toho bych se nebal

Víc mě teď nenapadá… :-/

Ondřej Brejla
Člen | 746
+
0
-

Patrik Votoček napsal(a):
ehm?

Mno já tedy běžně (ne běžně, nikdy) žádný iterátor neinstancuji ani nedědím…a troufám si tvrdit, že „běžně“ je takto nepoužívá většina…proto má úvaha o přesunu do Nette\Internal.

Jinak tvé poslední 3 body se mi líbí :-)

PaBi3
Bronze Partner | 62
+
0
-

Zvláštne, že Latte získalo namespace a Neon nie, keďže ide o triedy, ktoré sa v podstate starajú o to isté – parsovanie vstupu. Nette\Latte je nezávislé od šablón a funguje ako jeden celok, no používa sa (a asi aj bude) iba v šablónach, t.j. Nette\Templates\Latte.

Ondřej Brejla
Člen | 746
+
0
-

Vzhledem k tomu, že Tokenizer a TokenizerException jsou vlastně Neon lexer část, pak celý Neon sestává ze 4 tříd, ne?

Patrik Votoček
Člen | 2221
+
0
-

Jaj sorry to mě nedošlo! Beru z5…

Jan Tvrdík
Nette guru | 2595
+
0
-

Latte taky používá Tokenizer.

Ondřej Brejla
Člen | 746
+
0
-

To je pravda, ale nemění to nic na tom, že by měl mít Neon svůj vlastní namespace.

David Grudl
Nette Core | 8099
+
0
-

Proč by měla mít jedna třída vlastní namespace?

Ondřej Brejla
Člen | 746
+
0
-

Já bych ji tam hledal. Přijde mi logické, aby funkcionalita zajišťující „nový typ souboru“ byla ve vlastním prostoru. Ať už je to jedna třída, nebo čtyři. S výjimkou jsou dvě;-)

David Grudl
Nette Core | 8099
+
0
-

Mám pocit, že se tu tříští dvě rozdílné priority

  • katalogizační/kategorizační, kdy je cílem vše dostat do správné škatulky (ala PEAR)
  • uživatelská, kdy je cílem dobře psatelný a čitelný kód

Nette vždycky šlo cestou b), proto je teď docela oříšek ho napasovat na nějaké kategorie. U té cesty bych rád zůstal, takže na chvíli zapomeňme na jmenné prostory a zkusme si odpovědět na jednoduchou otázku: co je pro parsování JSON nejlepší?

  1. Nette\Json::decode($s)
  2. Nette\Json\decode($s)
  3. Nette\Json\Json::decode($s)
  4. Nette\Tools\Json::decode($s)
redhead
Člen | 1313
+
0
-

Já jsem pro d). Sice nejvíc ukecané, ale ty ostatní mi přijdou divné: neobalené funkce třídou určitě nechcu, u a) mi tam schází nějaký ten prostředek, co je ta třída zač, u c) 2× Json za sebou.

Json nijak moc nepatří k Nette jako takovému, je to pomocná třída, takže namespace Tools mi přijde logické.

Ondřej Brejla
Člen | 746
+
0
-

Já jsem taky pro d). Ale upravil bych to na

<?php
use Nette\Tools\Json;
...
Json::decode($s);
?>

Což ale vůbec není podstatné ;-)

Editoval Ondřej Brejla (6. 2. 2011 14:15)

David Grudl
Nette Core | 8099
+
0
-

Ondřej Brejla napsal(a):

Já jsem taky pro d).

To jsem chtěl slyšet :-)) Tj. Neon by neměl mít vlastní namespace Neon ;-)

Ondřej Brejla
Člen | 746
+
0
-

To si nemyslím :-) Neon definuje nový souborový typ, stejně jako latte…a proto by imho měl být ve vlastním NS :-) Json pouze nějakým způsobem pracuje s obecně známým typem. Navíc třída Json je pouze jakási helper class obalující nativní fce json_encode() a json_decode()…nebo mi tak přijde. NeonParser je plnohodnotný parser :-) Ale takhle bychom se mohli dohadovat do nekonečna ;-)

Editoval Ondřej Brejla (6. 2. 2011 14:36)

David Grudl
Nette Core | 8099
+
0
-

Mezi Json::decode() a Neon::decode() nevidím vůbec žádný reálný rozdíl. Obojí jsou parsery, obojí mohou být různé typy souborů atd.

Ale ano, je to příklad vnímání uživatelského a katalogizačního. Dal bys Neon do jiného prostoru proto, že jeho implementace je složitější, než Json. Ale to přece je uživateli úplně jedno.

jtousek
Člen | 951
+
0
-

Souhlasím s Davidem. Mezi Neonem a Jsonem v tomhle ohledu rozdílů až tolik není. Pokud Json nemá mít vlastní namespace (mimochodem také hlasuju pro d) tak Neon také ne. Akorát se Neon asi nehodí do namespace Tools, ale to už nechám na ostatních. Dění okolo nových namespaces jsem zas tolik nesledoval.

Ondřej Brejla
Člen | 746
+
0
-

David Grudl napsal(a):

To ne, spíš bych ho tam dal proto, že tím vzniká nějaká naprosto nová věc…„nový souborový typ, nový formát“, který pokud bych chtěl někde použít samostatně, tak vezmu vše z namespace „Neon“ a mám hotovo.

Ano, teď to jsou dva soubory (+2), ale pokud jich bude více, tak je to už větší problém. Pokud to bude v jednom prostoru se všemi možnými a nemožnými třídami, tak budu nejdřív muset rozlišit co je co.

Json nic nového nepřináší a je tedy méně pravděpodobné, že by někdo chtěl vzít „celou Nette Json implementaci“ a někde s ní pracovat. Neon je novinka a kde jinde by měla být jasně definována, než v projektu, ze kterého vzešla a kde jedině a pouze se vyskytuje.

Ale chápu tvůj pohled a je mi jasné, že to nakonec vymyslíš dle svého nejlepšího vědomí a svědomí :-)

Editoval Ondřej Brejla (6. 2. 2011 14:52)

David Grudl
Nette Core | 8099
+
0
-

Rozumím, jak to myslíš, a vlastně celou dobu bojuju s oběma pohledy a zdá se mi, že hlavním viníkem je snaha o mapování 1:1 mezi adresářovou strukturou a jmenným prostorem.

Adresář Nette/Neon vytváří dojem (byť třeba falešný), že jeho obsah bude nezávislý na čemkoliv jiném. Jedna třída mezi mnoha v adresáři Nette/Tools tak nepůsobí. Nebo jiný případ: vyčlenění všech výjimek z Nette/Application do podadresáře Exceptions adresář zpřehlednilo, ale mapovat totéž do jmenného prostoru mi připadá hloupé. Jak z toho ven?

Patrik Votoček
Člen | 2221
+
0
-

co nějakým způsobem odlišovat složky s související s namespace? a „úklidové“ složky? (třeba velikostí písmen)

David Grudl
Nette Core | 8099
+
0
-

To není špatný nápad. Teď ještě to promítnout i do API dokumentace.

westrem
Člen | 398
+
0
-

David Grudl napsal(a):

Mezi Json::decode() a Neon::decode() nevidím vůbec žádný reálný rozdíl. Obojí jsou parsery, obojí mohou být různé typy souborů atd.

Ale ano, je to příklad vnímání uživatelského a katalogizačního. Dal bys Neon do jiného prostoru proto, že jeho implementace je složitější, než Json. Ale to přece je uživateli úplně jedno.

Suhlasim s Davidom v tomto plus taktiez som pre variantu d).

Navrh na nove NS som pozeral len zbezne (nie uplne do hlbky) ale nieco ako Nette\Parsers by neobstalo? Pripadne Nette\Syntaxes – kde by mohlo ist Latte, Neon, JSON whatever – su to v podstate syntakticky rozne jazyky a vsetky triedy okolo toho maju na starosti jedno – spracovavat vstup v danej syntaxi (pripadne generovat vystup) – alebo je to prilis cudny pohlad na vec?

na1k
Člen | 288
+
0
-

Taky jsem pro d) a dovolím si nesouhlasit s tím, že by měl mít Neon vlastní NS proto, že pokud ho chci použít samostatně, prostě vezmu NS a hotovo. Na jednu stranu pravda, ale „Tools“, „Utils“ a jiné ve mně vždy evokovaly shromaždiště různých drobných tříd, funkcí,.., takže bych při snaze vydolovat samotný Neon stejně tak nějak automaticky zpozorněl.

Co se týče Parsers nebo Syntax, moc se mi nelíbí. Vycházím z toho, že Neon parser, stejně jako například Json parser je pro mě prostě tool, ze kterého stejně použiji jen jednu nebo dvě funkce. Ano, je to parser, ale zas tak striktně bych to zase nebral.

David Grudl
Nette Core | 8099
+
0
-

Proti Parsers hovoří hlavně funkce Nette\Parsers\Json::encode()

David Grudl
Nette Core | 8099
+
0
-

Mimochodem: jak byste vysvětlili důvod volby d) oproti a), když to znamená více psaní?

(a zajímá mě i argumentace proti b)

Ondřej Brejla
Člen | 746
+
0
-

a) Mi přijde špatně logicky. Json je „tool“, která se manuálně používá občas…v prostoru Nette bych opravdu čekal pouze ty opravdu hlavní a nejhlavnější věci.

b) Mi jde proti srsti…je to podivná konstrukce a nemam ji rád :-)

O délce psaní se bavit nemusím, protože namespace nevypisuji ručně, pouze si nechávám napovídat od IDE a entruji, takže je to delší přesně o 1 enter a o cca 1 šipku dolů :-)

Ondřej Brejla
Člen | 746
+
0
-

David Grudl napsal(a):

Rozumím, jak to myslíš, a vlastně celou dobu bojuju s oběma pohledy a zdá se mi, že hlavním viníkem je snaha o mapování 1:1 mezi adresářovou strukturou a jmenným prostorem.

Nevím jak to hezky a přehledně…a logicky…řešit jinak. Jsem zvyklý na co „balíček“ to „adresář“, takže mi to přijde normální…

Čachry s velikostí písmen…no…nevím, nedokáži si to moc představit a abych řekl pravdu, tak mě to tam někde vzadu v hlavě dost děsí :-) Možná právě proto, že si to nedokáži pořádně představit.

Patrik Votoček
Člen | 2221
+
0
-

ad A vs D nevím připadá mě logičtější když se jedná o Tool ho mít i v namespace Tool. a ad B mě se tahle varianta líbí nejvíc nicméně chápu že spousta lidí něco takového (po tak dlouhém životě bez namespace) překousne nehledě na problémy s kompatadebilitou u PHP 5.2.

Honza Marek
Člen | 1664
+
0
-

U toho JSONu je logické, že to je třída a ne namespace. Přijde mi to jako jednotka, která umí decode a encode. Šlo by to udělat i jako klasická třída, ale statická je praktičtější. Dále JSON jednoznačně patří do nějakého namespace Tools, protože účelem třídy je jen obalit vestavěné php funkce a zajistit lepší zpracování chyb, jinak nepřináší nic nového.

Nevím proč nedopřát Neonu vlastní namespace. Je to logicky samostatná komponenta na parsování nějakého formátu. Nesrovnával bych to s JSONem, ale spíš s Latte.

David Grudl

Proč by měla mít jedna třída vlastní namespace?

Tohle uvažování mi přijde zvrácené. Důkazem je nynější bordel, který je potřeba změnit ;) Pokud mám třídu a není ji kam dát, vyrobim jí vlastní ohrádku. Nedám ji do Core nebo Tools.

Ondřej Brejla

Jsem zvyklý na co „balíček“ to „adresář“, takže mi to přijde normální…

Taky mi taková struktura přijde logická. Bral bych to i jako pomůcku – když mám pokušení vytvořit další adresář, tak jeho obsah jistě patří do vlastního namespace. Výjimkou potvrzující pravidlo budiž adresář exceptions, který je založen kvůli tomu, abych se na ty výjimky nemusel koukat.

Ondřej Brejla
Člen | 746
+
0
-

To si docela hezky shrnul a vystihl mé myšlenkové pochody :-)

David Grudl
Nette Core | 8099
+
0
-

Honza Marek napsal(a):

U toho JSONu je logické, že to je třída a ne namespace. Přijde mi to jako jednotka, která umí decode a encode.

Neon umí taky decode a encode (že to neodpovídá současné implementaci není podstatné, rád to sjednotím s Json).

Dále JSON jednoznačně patří do nějakého namespace Tools, protože účelem třídy je jen obalit vestavěné php funkce a zajistit lepší zpracování chyb, jinak nepřináší nic nového.

Tohle uživatel neví a nezajímá ho to. Myslíš, že lepší pořádek se zavede tím, že podle znalosti vnitřní implementace se určí, kde třídu hledat?

Nevím proč nedopřát Neonu vlastní namespace. Je to logicky samostatná komponenta na parsování nějakého formátu. Nesrovnával bych to s JSONem, ale spíš s Latte.

To snad ne. Neon a JSON je totéž s mírně odlišnou syntaxí. Latte je šablonovací jazyk skládající se z několika tříd.

Pokud má mít Neon vlastní namespace, jaký a jak nazvat třídu?

Tohle uvažování mi přijde zvrácené. Důkazem je nynější bordel, který je potřeba změnit ;)

Mám za to, že jako bordel, který je třeba měnit, to vlastně skoro nikdo nevidí. Proto ty neustálé nikam nevedoucí diskuse. Nechci být drzý ;-) ale skutečnost, že pro Neon chcete vlastní namespace a pro Json nikoliv, mi spíš ukazuje, že míříte někam do slepé uličky.

hrach
Člen | 1834
+
0
-

Davide: +1

Patrik Votoček
Člen | 2221
+
0
-

Nevím proč ale začíná mě připadat že se tahle diskuse točí v kruhu bez nějakého rozumného „kompromisu“ bylo by asi na čase to utnout. Nemyslíte? Už se v tom začínám ztrácet.

Honza Marek
Člen | 1664
+
0
-

David Grudl napsal(a):

Neon umí taky decode a encode (že to neodpovídá současné implementaci není podstatné, rád to sjednotím s Json).

Nechápu kam tím míříš, tady si asi nějak nerozumíme.

Tohle uživatel neví a nezajímá ho to.

Pokud to uživatel neví, použije json_encode a json_decode z PHP.

Myslíš, že lepší pořádek se zavede tím, že podle znalosti vnitřní implementace se určí, kde třídu hledat?

Tenhle argument jsem čekal ;) Prostě třídu JSON nepovažuji za „ten správný JSON parser“, ale za „opravovátko chyb JSON parseru v PHP“. Chápeš, jak chápu ten rozdíl? Pokud chceš Nettí JSON prezentovat jako něco víc, čímž není, dej tomu vlastní namespace ;)

To snad ne. Neon a JSON je totéž s mírně odlišnou syntaxí. Latte je šablonovací jazyk skládající se z několika tříd.

Argument o počtu tříd na mě nefunguje. Latte byla taky dřív jedna třída.

Pokud má mít Neon vlastní namespace, jaký a jak nazvat třídu?

Nette\Neon\Neon nebo Nette\Neon\Parser

Je libo inspirace u konkurence?

skutečnost, že pro Neon chcete vlastní namespace a pro Json nikoliv, mi spíš ukazuje, že míříte někam do slepé uličky

To ukazuje na to, že Neon považuješ za drobnost, zatímco třeba já v něm vidím potenciální megasupercool feature. To pak ovlivní i názor, jestli by to mělo mít vlastní namespace :)

David Grudl
Nette Core | 8099
+
0
-

Patrik Votoček napsal(a):

Nevím proč ale začíná mě připadat že se tahle diskuse točí v kruhu bez nějakého rozumného „kompromisu“ bylo by asi na čase to utnout. Nemyslíte? Už se v tom začínám ztrácet.

Proč? Je to normální diskuse, všem argumentům rozumím, sám nemám jasno a rád budu pokračovat ;-)

David Grudl
Nette Core | 8099
+
0
-

PHP je tradičně vytýkána nesourodost v pojmenování tříd a funkcí. Tohle bych do Nette fakt zavádět nechtěl, tj. dávat různá jména podle toho, jako moc cool mi ta která funkce připadá.

ad počet tříd: neříkej, že argument s počtem tříd na tebe neplatí a raději napiš jasný důvod, proč by neměl platit.

Já chápu namespace jako způsob, jak 1) zabránit konfliktu názvů (to je prefix Nette\) a 2) oddělit nezávislé funkční celky (to je Forms\ nebo Forms\Controls). Jednu třídu jako funkční celek nevnímám.

Dále: podobnou úlohu jako jmenné prostory plní i statické třídy. Kombinace obojího je pak dle mého nesmyslná. Nedokázal bych odpovědět na otázku, proč se v Nette píše Nette\Neon\Neon::decode() a ne Nette\Neon::decode(). (Nette\Tools\Neon::decode() mi nevadí, ale nemám pocit, že verze bez nebo s Tools by byla v něčem lepší).

Ondřej Brejla
Člen | 746
+
0
-

Patrik Votoček napsal(a):

To je hloupost ne, vždyť tu akorát padlo pár názorů, které jsme se snažili podpořit argumenty. Navíc ani David neví pořádně co a jak, takže bych naopak diskusi rozvinul, než zatrhnul.

Jo a vy už jste to říkali a já jedu z keše…

Editoval Ondřej Brejla (6. 2. 2011 23:59)

Ondřej Brejla
Člen | 746
+
0
-

@David:

  1. Já vidím funkční celek i v té jedné třídě, koukám na to ne jako na „třídu“, ale jako na „jeden nástroj pro podporu práce s .neon file“. To, že je to jedna třída a jedna výjimka pro mne není podstatné. Na Json se dívám jako na „obyčejnou obálku běžných funkcí“.

V tom bude ten problém. Ty koukáš asi na implementaci, na výsledek, který je výstupem, já na to „co mi to může nabídnout, jakou to má pro mne přidanou hodnotu“. Neon relativně velkou, Json žádnou. Proto bych asi „jednosouborový neon“ považoval za samostatný blok hodný svého prostoru.

To je takový můj půlnoční brainstorm, snažím se jít do hloubky a zjistit proč přemýšlím jak přemýšlím…hm…:-)

David Grudl
Nette Core | 8099
+
0
-

Ale stále řešíš tu vnitřní implementaci. Znamená to, že kdybych přepsal způsob, jak Json::decode() dekóduje, měl by tím pádem mít vlastní namespace?