Zjemnění jmenných prostorů
- Honza Marek
- Člen | 1664
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?
- Jan Tvrdík
- Nette guru | 2595
Zkus rozpracovat kompletní návrh. Vyplyne ti z něho (nebo také ne) spousta nejasností a problémů.
- Patrik Votoček
- Člen | 2221
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 | 8228
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.
- Honza Marek
- Člen | 1664
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
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 | 8228
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
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 | 8228
…a taky kvůli chybějícímu use Nette\Application\*, které Java i .NET umí.
- Nox
- Člen | 378
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)
- Honza Kuchař
- Člen | 1662
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
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
- David Grudl
- Nette Core | 8228
Jak tu už psal Honza, bez rozpracování návrhu to skončí jen u řečí a plusjedniček.
- Honza Marek
- Člen | 1664
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)
- jansfabik
- Člen | 193
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.
- Jan Tvrdík
- Nette guru | 2595
Na první pohled souhlasím s @jansfabik. Na ten druhý bych si musel udělat víc času.
- Patrik Votoček
- Člen | 2221
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…
- Jan Tvrdík
- Nette guru | 2595
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
.
- Jan Tvrdík
- Nette guru | 2595
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 | 8228
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í).
- Honza Marek
- Člen | 1664
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
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
.
- Patrik Votoček
- Člen | 2221
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.