Zjemnění jmenných prostorů

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

V současné chvíli je velká část tříd frameworku umístěna jen pod značně neurčitými jmennými prostory Nette nebo Nette\Application. Myslím, že jmenné prostory by měly lépe vyjadřovat jednotlivé celky, co k čemu patří.

Typickými příklady jsou neexistující jmenné prostory Nette\Debug, kde by mohly fungovat třídy jako Debug, DebugBar, IDebugPanel, RoutingDebugger a možná další. Nebo Nette\Application\Routing se třídami MultiRouter, Route, SimpleRouter, CliRouter, IRouter. Ovšem ani argument, že by některá třída byla ve jmenném prostoru sama mi nepřijde dost dobrý, pokud se do jinému nehodí.

Takové změny lze pochopitelně páchat jen před zveřejněním Nette 2.0 beta.

Co si o tom myslíte?

Mikulas Dite
Člen | 756
+
0
-

Nevadilo by mi to, ale i se současným stavem jsem spokojený.

sodae
Nette Evangelist | 250
+
0
-

Neměl bych problém, je pravda, že jsou třídy rozděleny moc obecně ale jsem spokojen se současným stavem

HanziQ
Člen | 16
+
0
-

+1

na1k
Člen | 288
+
0
-

Už jsem si zvykl, kde které třídy hledat, ale nijak zásadně proti nejsem. S čistými Nette třídami totiž vlastně ani moc do styku nepřicházím. AppForm, Control a Presenter mám obalené vlastním BaseXX a když už potřebuju volat něco z vnitřností, tak mi namespace doplní IDE.

Jan Tvrdík
Nette guru | 2595
+
0
-

Zkus rozpracovat kompletní návrh. Vyplyne ti z něho (nebo také ne) spousta nejasností a problémů.

Patrik Votoček
Člen | 2221
+
0
-

Zrovna jsem si v práci položil naprosto odlišnou otázku jak udělat ve firemním projektu jmenné prostory hrubější. Je fakt že aktuální stav v Nette by se dal malinkdo zjemnit s tím souhlasím ale pak by mohly vznikat zajímavé „fullclass“ kde se jedno slovo vyskytuje zbytečně vícekrát. A to protože Nette 2.0 je kompatabilní s non-namespace takže by se nemohli zkrátit názvy tříd. Nedávno jsem přemýšlel nad Nette\Application\AppForm že by se mě víc líbilo Nette\Application\Form ale narazil jsem přesně na tento problém proto jsem to ani nikam nepsal jako návrh.

Editoval vrtak-cz (14. 11. 2010 13:09)

David Grudl
Nette Core | 8215
+
0
-

V současném stavu frameworku by prostory jako Nette\Application\Routing, Nette\Forms\Controls nebo Nette\Debuging měly své opodstatnění, nebo naopak Nette\Web\Html moc do prostoru Nette\Web nesedí. Na jedné straně to přispívá k lepší kategorizaci kódu, na druhé straně to prodlužuje kód duplicitami. Viz třeba Nette\Debug::enable() vs Nette\Debuging\Debug::enable(). Takže je třeba rozhodnout, čemu dát prioritu.

jtousek
Člen | 951
+
0
-

@DG: Od toho je přece klauzule use.

+1

Honza Marek
Člen | 1664
+
0
-

David Grudl napsal(a):

na druhé straně to prodlužuje kód duplicitami

Tohle přestane být zajímavé v okamžiku, kdy IDEčka budou nějakým způsobem podporovat sypání tříd do use. Což je doufám otázka chvíle…

mcmatak
Člen | 504
+
0
-

podobnými změnami jsem si vždycky slušně zavařil :) přemýšlíte nad tím, že jsou lidé/firmy co mají na nette postaveno „stovky“, myslím to vážně, stovky projektů (velkých, malých, to je jedno)?

moc hezká změna, která dle mého nepřináší nic nového ani lepšího (nijak zvlášť mi to nepomůže orientovat se v nette), která by mne stála mooooc hodně peněz, davide raději ti zaplatím dovolenou v karibiku než tohle (ber to s nadsázkou, s ambiente samozřejmě počítám, ale čekám, kdy už konečně vyjde to nette :) a changelog!)

  • 1

připojuju s k Jan Tvrdík ukažte návrh, možná to až tak super nebude a ta změna opravdu nic nepřinese, ale třeba se pletu, každopádně plýtvat energií se dá i na jiné méně nepodstatné věci

David Grudl
Nette Core | 8215
+
0
-

Honza Marek napsal(a):

Tohle přestane být zajímavé v okamžiku, kdy IDEčka budou nějakým způsobem podporovat sypání tříd do use. Což je doufám otázka chvíle…

Argument IDEčkem zase neberu já ;-)

Honza Marek
Člen | 1664
+
0
-

Na tom argumentu je špatné „jen“ to, že IDEčko, o kterém mluvím, jsem si vytáhl z křišťálové koule. V javě nebo .netu si balíčků nebo jmenných prostorů ani nevšimneš, právě kvůli dobré podpoře IDE.

David Grudl
Nette Core | 8215
+
0
-

…a taky kvůli chybějícímu use Nette\Application\*, které Java i .NET umí.

Nox
Člen | 378
+
0
-

mcmatak napsal(a):
podobnými změnami jsem si vždycky slušně zavařil :) přemýšlíte nad tím, že jsou lidé/firmy co mají na nette postaveno „stovky“, myslím to vážně, stovky projektů (velkých, malých, to je jedno)?
moc hezká změna, která dle mého nepřináší nic nového ani lepšího (nijak zvlášť mi to nepomůže orientovat se v nette), která by mne stála mooooc hodně peněz, davide raději ti zaplatím dovolenou v karibiku než tohle (ber to s nadsázkou, s ambiente samozřejmě počítám, ale čekám, kdy už konečně vyjde to nette :) a changelog!)

  • 1

připojuju s k Jan Tvrdík ukažte návrh, možná to až tak super nebude a ta změna opravdu nic nepřinese, ale třeba se pletu, každopádně plýtvat energií se dá i na jiné méně nepodstatné věci

Mělo by být možné napsat skript, co by změnu označení NS provedl napříč projektem za nás, ne? Ne že by to úplně anulovalo tenhle názor, ale z nemalé části by to řešilo (i když samozřejmě někdo by to musel napsat)

Editoval Nox (15. 11. 2010 19:37)

paranoiq
Člen | 392
+
0
-

kdo chce mít jmenné prostory jemné jak dětskou prdelku, může taky použít funkci class_alias()

Honza Kuchař
Člen | 1662
+
0
-

Změna se tyka jen Nette 2.0, tedy nebranim se tomu a mozna to i uvitam.

Neberu argument, ze hromada firem ma na Nette hromadu projektu. Stare projekty – stare Nette. Takze jsem pro vsechny BC zmeny.

Honza Marek
Člen | 1664
+
0
-

paranoiq napsal(a):

kdo chce mít jmenné prostory jemné jak dětskou prdelku, může taky použít funkci class_alias()

anebo naopak… kdo je potřebuje zpětně kompatibilní, může použít také class_alias

Majkl578
Moderator | 1364
+
0
-

Jsem také pro zjemnění. Třeba responses, form controly a AppForm → Form jsou kandidáty. :)

Honza Marek napsal(a):

anebo naopak… kdo je potřebuje zpětně kompatibilní, může použít také class_alias

Tak tak.

David Grudl
Nette Core | 8215
+
0
-

Jak tu už psal Honza, bez rozpracování návrhu to skončí jen u řečí a plusjedniček.

Honza Marek
Člen | 1664
+
0
-

Bylo by dobré sjednotit množné a jednotné číslo u namespaců. Protože např. Nette\Applications nedává smysl, přikláněl bych se k jednotnému (Nette\Form).

Namespace Nette

Vyčlenit Nette\DependencyInjection:

  • AmbiguousServiceException
  • Context (nebo budoucí jiný název)
  • IContext
  • asi další výjimky (ServiceNejdeVyrobitException, …)

Vyčlenit Nette\Debug:

  • Debug
  • DebugPanel
  • IDebugPanel
  • RoutingDebugger (z Nette\Application)

Vyčlenit Nette\ComponentModel nebo Nette\Component:

  • Component
  • ComponentContainer
  • RecursiveComponentIterator

Vyčlenit Nette\Helper nebo Nette\Tool:

  • ArrayTools
  • Paginator
  • RegexpException
  • SafeStream
  • String
  • přimlouval bych se za zavedení třídy Regexp
  • Tools
  • Html (z Nette\Web)

Vyčlenit Nette\Image:

  • Image
  • ImageMagick
  • budoucí ImageException ;)

Vyčlenit Nette\Neon:

  • Neon
  • NeonException

Vyčlenit Nette\Bullshit:

  • Callback

Vyčlenit Nette\Environment nebo možná nechat nebo je nechat umřít s příchodem DI:

  • Configurator
  • Environment

Vyčlenit Nette\Finder:

  • Finder

Vyčlenit Nette\Internatialization nebo jak se to píše:

  • ITranslator

Nechat:

  • Framework
  • Object
  • FreezableObject
  • ObjectMixin
  • IFreezable

Nevím nebo neznám:

  • ArrayList
  • CallbackFilterIterator
  • GenericRecursiveIterator
  • RecursiveCallbackFilterIterator
  • InstanceFilterIterator
  • SmartCachingIterator
  • Tokenizer
  • TokenizerException

Namespace Nette\Application

Vyčlenit Nette\Application\Routing:

  • CliRouter
  • MultiRouter
  • Route
  • SimpleRouter
  • IRouter

Vyčlenit Nette\Application\Response:

  • DownloadResponse
  • ForwardingResponse
  • JsonResponse
  • RedirectingResponse (RedirectResponse?)
  • RenderResponse
  • IPresenterResponse
  • tady bych i sundal ten suffix Response z názvů tříd

Nechat:

  • AbortException
  • AppForm
  • Application
  • ApplicationException
  • BadRequestException
  • BadSignalException
  • Control
  • ForbiddenRequestException
  • InvalidLinkException
  • InvalidPresenterException
  • Presenter
  • PresenterComponent
  • PresenterLoader
  • Link
  • PresenterRequest
  • IPartiallyRenderable
  • IPresenter
  • IPresenterLoader
  • IRenderable
  • ISignalReceiver
  • IStatePersistent
  • kdyby tady někdo měl nějaké světoborné myšlenky, uvítám diskuzi

Přesunout jinam:

  • RoutingDebugger → Nette\Debug

Nette\Caching

nechat

Nette\Forms

Přejmenovat na Form a dál ať to vymyslí někdo jinej.

Nette\Loaders

Jednotné číslo…

Nette\Mail

nechat

Nette\Reflection

nechat

Nette\Security

nechat

Nette\Templates

Jednotné číslo Nette\Template.

Vyčlenit Nette\Template\LatteFilter, jinak nechat.

Nette\Web

Vykopnout Nette\Web\Html do Nette\Helper či Nette\Tool, jinak nechat.

Editoval Honza Marek (20. 11. 2010 18:05)

Inza
Člen | 330
+
0
-

Proboha k čemu je jmenný prostor Nette\Bullshit: ??

Co je v něm?

To je nějaký vtip, nebo to myslíte vážně?

Editoval Inza (20. 11. 2010 18:54)

Lopata
Člen | 139
+
0
-

Souhlasím, jen bych možná ještě přejmenoval Nette\Caching na Nette\Cache, když už jsme u toho sjednocování…

Patrik Votoček
Člen | 2221
+
0
-

musím si dát pár piv abych to lépe vstřebal…

jansfabik
Člen | 193
+
0
-

Nechcete to dát na Google Wave? Dá se v tom líp orientovat a mj. je tam i plugin pro hlasování.

Souhlasím s Honzou Markem, až na:

Bylo by dobré sjednotit množné a jednotné číslo u namespaců. Protože např. Nette\Applications nedává smysl, přikláněl bych se k jednotnému (Nette\Form).

Třeba .NET Framework to taky má všude jinak a já třeba nevím jak vy, ale na Nette\Tool\Tools bych si fakt těžko zvykal. Tady by se hodilo to hlasovátko, co je na Google Wave.

Vyčlenit Nette\Helper nebo Nette\Tool:

Tady bych byl pro množné číslo a možná bych použil raději třeba Utils (Nette\Tools\Tools vs Nette\Utils\Tools).

přimlouval bych se za zavedení třídy Regexp

S tím nesouhlasím, vlastně ani David.

Vyčlenit Nette\Bullshit:

  • Callback

(Asi jde o vtip.) Tohle bych možná nechal v Nette, ale klidně by to mohlo taky být v Nette\Utils.

Vyčlenit Nette\Finder:

  • Finder

Tohle by taky mohlo být v utilitách.

Vyčlenit Nette\Internatialization nebo jak se to píše:

  • ITranslator

Správně je to Internationalization. Možná bych raději Globalization (právě kvůli té délce).

  • ArrayList

Nette\Collection (možná Collections z historických důvodů, ale když je tam teď už jenom jedna třída… :-))

  • CallbackFilterIterator
  • GenericRecursiveIterator
  • RecursiveCallbackFilterIterator
  • InstanceFilterIterator
  • SmartCachingIterator

Nette\Iterators (tady bych byl taky pro plurál)

  • Tokenizer
  • TokenizerException

Nette\Tokenizer

Namespace Nette\Application

Vyčlenit Nette\Application\Routing:
Vyčlenit Nette\Application\Response:

Víc bych to uvítal tak, jak je akt. adresářová struktura (Routers, Responses), ale Routing ani Response se nebráním.

  • DownloadResponse
  • ForwardingResponse
  • JsonResponse
  • RedirectingResponse (RedirectResponse?)
  • RenderResponse
  • IPresenterResponse
  • tady bych i sundal ten suffix Response z názvů tříd

Tady bych byl pro sjednocení (ForwardResponse a RedirectResponse). Suffixy bych nechal, bylo by tam rozhraní IPresenter a to by se pletlo s Nette\Application\IPresenter.

Nette\Caching

Možná spíš ta Nette\Cache (jak navrhuje Lopata).

Nette\Forms

Přejmenovat na Form a dál ať to vymyslí někdo jinej.

Nette\Forms\Form mi připadá OK, udělal bych to podle adresářové struktury (rozdělení na Controls a Renderers).

Nette\Loaders

Jednotné číslo…

Tady bych taky nechal plurál.

Nette\Templates

Jednotné číslo Nette\Template.

Tady taky.

jansfabik
Člen | 193
+
0
-

Tady je link na Google Wave: https://wave.google.com/…/w+V13kUVMRC

Jan Tvrdík
Nette guru | 2595
+
0
-

Na první pohled souhlasím s @jansfabik. Na ten druhý bych si musel udělat víc času.

Majkl578
Moderator | 1364
+
0
-

Vesměs souhlasím s jansfabik, s pár rozdíly:

  • místo Internationalization by šlo použít i I18N/L10N
  • Nette\Application\Routers a Nette\Application\Responses
  • Nette\Application\AppForm → Nette\Application\Form

Editoval Majkl578 (20. 11. 2010 22:06)

redhead
Člen | 1313
+
0
-
$I18N++;
Patrik Votoček
Člen | 2221
+
0
-

Majkl578 napsal(a):

  • Nette\Application\AppForm → Nette\Application\Form

Z důvodů komptability s 5.2.x nemožné… Psal jsem to už výše…

jansfabik
Člen | 193
+
0
-

Když si to takhle rozepíšu:

  • Nette\I18n\ITranslator
  • Nette\L10n\ITranslator
  • Nette\Globalization\ITranslator
  • Nette\Localization\ITranslator
  • Nette\Internationalization\ITranslator

Tak nejlepší se mi zdá Localization.

Jan Tvrdík
Nette guru | 2595
+
0
-

vrtak-cz napsal(a):

  • Nette\Application\AppForm → Nette\Application\Form

Z důvodů komptability s 5.2.x nemožné… Psal jsem to už výše…

A to jako proč? Akorát místo use Nette\Application\AppForm se bude doplňovat use Nette\Application\Form as AppForm.

jansfabik
Člen | 193
+
0
-

to v PHP 5.2 nejde

Majkl578
Moderator | 1364
+
0
-

Vrták asi myslel to, že by kolidovaly názvy tříd. To by ale šlo vyřešit přímo v generátoru 5.2 verzí přidáním výjimky pro Nette\Application\Form, ne? ;)

Jan Tvrdík
Nette guru | 2595
+
0
-

(Předpokládal jsem přechod z PHP 5.2 na 5.3 + to, co říká Majkl578.)

jansfabik
Člen | 193
+
0
-

Pardon, špatně jsem to pochopil. Tak to by neměl být moc velký problém.

Jenom bych se trochu bál třeba tady:

$this->monitor('Nette\Application\AppForm');
Jan Tvrdík
Nette guru | 2595
+
0
-

To nešlo kompatibilně řešit ani předtím.

jansfabik
Člen | 193
+
0
-

Tohle funguje jak v PHP 5.2 (tady se ořeže jmenný prostor), tak i v PHP 5.3. Ale stejně se to dá spravit jedním search'n'replace, takže jsem taky pro Nette\Application\Form.

Vyki
Člen | 388
+
0
-

Nette\I18n\ITranslator, Nette\L10n\ITranslator asi není moc intuitivní. Nette\Localization\ITranslator vypadá mnohem lépe.

mkoubik
Člen | 728
+
0
-

Honza Marek napsal(a):
Vyčlenit Nette\Internatialization nebo jak se to píše:

Tohle nikdo bez IDE nenapíše (jak je vidět na tvém příkladu :-)

Jan Tvrdík
Nette guru | 2595
+
0
-

Naštěstí to ale budeš potřebovat psát málokdy + situace s IDE už je výrazně lepší než když PHP 5.3 vyšlo.

David Grudl
Nette Core | 8215
+
0
-

Díky za rozpracování návrhu.

Pár věcí:

  • není mi úplně jasné, proč sjednocovat množné a jednotné číslo. Tím neříkám, že je to špatně, jen mi chybí argument
  • odstraňování suffixů je hloupost, to nechme Zendu ;-) Třída nazvaná Forwarding nebo Json zcela postrádá smysl.
  • nejdůležitější je odpovědět na otázku „komu tím prospějete?“ V čem spočívá přínos pro programátora?
  • výhodou je, že to lze provést bez jakékoliv zpětné nekompatibility

Stále existuje pracovní varianta, která počítá s tím, že by se všechny třídy mohly aliasovat do prostoru Nette případně prefixovat písmenem N. To by mohlo být praktické řešení pro všechny, kteří nepoužívají IDE (i z pohledu školitele mě představa, že říkám "napište implements Nette\Internationalization\ITranslator docela děsí).

paranoiq
Člen | 392
+
0
-

když už jsme u těch aliasů. klidně je možné ihned vyhodit z distribuce non-prefixed verzi pro 5.2. kompatibilita jde vyřešit jedním souborem s aliasy tříd

David Grudl
Nette Core | 8215
+
0
-

Aliasy existují jen v PHP 5.3

Honza Marek
Člen | 1664
+
0
-

Současný stav mi přijde nekonzistentní. Proč Mail si zaslouží vlastní jmenný prostor a Image ne? Pořád je to ucelená knihovnička náhodou patřící do Nette Frameworku.

Jemnost jmenných frameworků je pak pojistkou proti nepředvídatelné evoluci, kdy třeba z Latte filteru či Nette debugu vyrostly klíčové a velké součásti frameworku, ale oproti Nette\Caching nebo Nette\Reflection nemají vlastní jmenný prostor. Jen proto, že ze začátku byly zamýšlené jako jednoduché třídy, kde vlastní jmenný prostor „nebyl potřeba“.

Dalším (trochu subjektivním) důvodem je marketingové hledisko. Třeba v Symfony je malá knihovnička na procházení DOMu HTML stránky v jQuery stylu. Díky zajímavému nápadu, ale z části i vlastnímu namespacu, z toho může Fabien Potencier udělat v prezentacích a na webu velké téma. V Nette takový reklamní potenciál mají dle mého názoru třeba Image, Neon, Finder, o Debugu nemluvě, v budoucnu se snad přidá DI. Ostatně… svůj názor, co si zaslouží vlastní namespace, jsem vyjádřil tom návrhu výše.

Mikulas Dite
Člen | 756
+
0
-

Návrh vypadá dobře, souhlasím i se sjednocením jednotného/množného čísla. IDE/neIDE, nebude se to plést.

A ještě mě tak napadá, že Nette\Application\PresenterComponentReflection by dával větší smysl v Nette\Reflection.

redhead
Člen | 1313
+
0
-

Souhlas až na to sjednocení množné/jednotné. Trochu logického myšlení do toho a nespletete si to. I jiné jazyky to tak mají a žádné zmatení v tom nevidím.

Jan Tvrdík
Nette guru | 2595
+
0
-

Taky se vyslovuji proti sjednocení množného a jednotného čísla.

arron
Člen | 464
+
0
-

Doufam, ze IDE mi bude vzdycky napovidat, ale stejne jako je uzus ohledne lomitek v cestach, nevidim duvod proc mit neporadek v jednotnych a mnoznych cislech (pokud k tomu neni jasny duvod). Cili ja bych sjednotil:-)

Patrik Votoček
Člen | 2221
+
0
-

Konkrétní návrh jsem nečetl (je to moc dlouhé). Obecně jsem pro zjemnění namespace a proti sjednocení jednotného a množného čísla v namespace.