Zjemnění jmenných prostorů
- David Grudl
- Nette Core | 8227
Přidal jsem stránku na wiki, kde je současné rozložení a postupnou editací ho upravíme do nového rozložení https://dev.nette.org/…c/namespaces
- Honza Marek
- Člen | 1664
Zkusil jsem tam něco upravit.
Poznámky pro editory:
- Asi bude rozumné, když při přesunu zachováme na stránce třídám původní namespace. Tak bude poznat, co kam patřilo.
- Třídy i jmenné prostory jsou řazeny podle abecedy.
- Kontroverzní návrhy bude asi dobré nejdřív prodiskutovat na fóru.
- David Grudl
- Nette Core | 8227
Stejně mi na tom stále něco nesedí.
Jemnější rozdělení je velmi užitečné z hlediska katalogizace tříd, to je bez diskuse. Nakonec i adresářová struktura to tak má. Hodilo by se to i ve vygenerované API dokumentaci.
Ale z hlediska programátora mi to stále připadá jako krok k ještě
většímu opruzu, než jsou současné namespaces. Zkuste se zamyslet nad
jednou věcí: všichni asi používáme klauzuli use, která
defacto není ničím jiným, než propustkou z Nette 5.3 do Nette 5.2 (tedy
existuje jakási vůle jmenné prostory odsunout do jednoho řádku na začátek
souboru). Řada programátorů by přivítala ještě jednodušší syntax,
např. use Nette\ *
, tedy ještě větší eliminaci namespaces.
Zdá se, že katalogizační požadavky jsou v rozporu s programovacími
požadavky. Naopak jakési univerzální use Nette\ * as N*
se
s dobrým přijetím nesetkalo.
Stále mi to prostě nesedí.
- Honza Marek
- Člen | 1664
Nedával by smysl nějaký namespace Nette\Parsing, kde by byl prozatím NeonParser, NeonException, Tokenizer a TokenizerException?
- Ped
- Člen | 64
Nilp napsal(a):
V momentě, kdy se použije
use
, už na délce namespace přece tolik nezáleží.
Otazka je proc vubec mit namespace (jemne deleny), kdyz se skrz „use“ okamzite odstrani na prvnim radku zdrojaku. Hrube deleny „Nette\“ lze pochopit jako obranu proti kolizim s jinou knihovnou ktera by mohla definovat stejne tridy, ale jakekoli dalsi deleni mi pak nedava smysl.
Kdyz se use nepouzije a pisou se NS vsude, pak zase na delce NS myslim zalezi, obecne plati ze kratsi kod se lip cte. Dobre pojmenovane NS muzou trochu prispet k citelnosti, ale vetsinu casu to mne osobne prijde jenom jako accident zbytecnost.
- Honza Marek
- Člen | 1664
Já vidím jmenné prostory jako docela příjemnou bariéru, která zajišťuje to, že při programování něčeho v jednom jmenném prostoru se absolutně nemusím starat o to, co je okolo. Z toho důvodu ani moc nesouhlasím s názorem, že ve více jmenných prostorech by se neměly objevovat třídy se stejným názvem. O to bych se IMHO při vymýšlení názvu třídy neměl starat. Samozřejmě je nesmysl pojmenovat třídu tak obecně, že se může vyskytnout všude, například Exception. Opačným příkladem mi přijde název Config, kde mi přijde, že stačí odlišení jmenným prostorem.
Vůbec se mi nezdá, že use ruší jmenné prostory.
Pomocí tohoto klíčového slova si přece jen vybírám které třídy
z kterých jmenných prostorů chci použít. O rušení by šlo uvažovat,
kdyby to fungovalo tak, že dám use User
a najednou by tam byla
kolize mezi MyApp\Model\User
a Nette\Web\User
;)
Hlavně k tomu, aby programátor sám od sebe rozhodl, jaká práce se jmennými prostory je mu nejbližší, tak si musí osobně vyzkoušet všechny různé styly práce s NS. Názor, který jsem napsal v prvním odstavci, bych nevymyslel od stolu. Dříve mi přišly jmenné prostory také spíše jako opruz, ale teď oceňuju tu nevídanou svobodu při výběru názvu třídy :)
- David Grudl
- Nette Core | 8227
Honza Marek napsal(a):
Já vidím jmenné prostory jako docela příjemnou bariéru, která zajišťuje to, že při programování něčeho v jednom jmenném prostoru se absolutně nemusím starat o to, co je okolo.
V tom se jistě všichni shodneme. Jako samostatnou jednotku můžeme brát i celý framework, který může být umístěn v jednom prostoru bez dalšího rozlišení.
Vůbec se mi nezdá, že use ruší jmenné prostory.
Snad si tu nemusíme říkat, co dělá use. Ale chybí mi stále ten argument, v čem je lepší, že v klauzuli use použiju delší řetězec než dosud.
- Mikulas Dite
- Člen | 756
PresenterComponentReflection
bych přesunul do reflexí, tedy podNette\Reflection
.GenericRecursiveIterator
analogicky jakoTemplate
/FileTemplate
přejmenoval jenom naRecursiveIterator
.Nette\Diagnostics
dobrý, ale alias bych nedělal. Každý má v bootstrapu alias rovnou nadump()
, případněbarDump()
.Nette\Application\RoutingDebugger
doDiagnostics
.AppForm
by měl býtApplicationForm
. Zvyknul jsem si a nechci to měnit, ale bylo by to správnější.Nette\Bootstrap\
bych rozpustil,Configurator
přesunul podNette\Config\
.Environment
zatím docore
časem zmizí (?).- Geroundia nejsou v názvu moc hezká, místo
RedirectingResponse
atp. je kratší/hezčíRedirectResponse
. Nette\Forms
jsou hodně obsáhlá, co takhle pro jednotlivé vykreslitelné třídy udělatNette\Forms\Input
?Nette\Latte
má smysl použít jenom sTemplate
, tedy podNette\Template\Latte
.
Editoval Mikulas Dite (31. 1. 2011 8:47)
- Patrik Votoček
- Člen | 2221
Tak to teď čtu (je to dlouhé asi to budu muset dát na etapy)
ArrayTools
, …,Callback
,String
,Tools
vs namespaceNette\Tools
to mě trochu nesedíNette\Diagnostics
i když se tím zabrání vznikuNette\Debuging\Debug
tak pořád se měNette\Debuging
líbí víc (Symfony\Component\HttpKernel\Debug\ExceptionListener
)Nette\Bootstrap
mě připadá zbytečnýNette\Application\Routing
aNette\Application\Responses
no konečně- zrušení
Nette\Config
je zajímavá myšlenka ale jsem tak 50:50 Nette\Forms
nevím teda jak přesně budou stavěné nové třídy ale taky bych byl pro oddělení jednotlivých prvků do samostatného namespace. možná pokud bude i více rendererů tak bych je hodil taky do stamostatnéhoNette\Latte
vs.Nette\Template
pořád si s tím nejsem jistý… :-/- co takhle přejmenovat
Nette\Web
naNette\Http
neboNette\HttpKernel
(Symfony\Component\HttpKernel\HttpKernel
) - neměl by být
Presenter
,Control
aAppForm
podNette\ComponentModel
? RoutingDebugger
doNette\Diagnostics
PresenterComponentReflection
doNette\Reflection
- Filip Procházka
- Moderator | 4668
nesouhlasím s
Patrik Votoček napsal(a):
- neměl by být
Presenter
,Control
aAppForm
podNette\ComponentModel
?
jinak mám podobný pohled
- David Grudl
- Nette Core | 8227
ad Nette\Core vs Nette\Tools: v jednom by měly být základní knihovní třídy jako je NObject, ve druhém nástroje jako Image nebo Finder. U řady tříd ale sám nemám jasno
ad Nette\Diagnostics: kromě Debug bych sem chtěl zařadit Logger, profiler apod. Obecně jde o nástroje diagnostikující běh webu, nikoliv jen chyby.
ad PresenterComponentReflection, RoutingDebugger, DatabasePanel: tyhle třídy sice rozšiřují třídu z jiného prostoru/balíčku, ale přitom patří do balíčku, ve kterém jsou nyní zařazeny.
ad Presenter, Control a AppForm: tohle by mělo být v nějakém Nette\Application\Něco, ale zatím v tom nemám jasno.
ad Nette\Latte: tohle principiálně funguje i bez šablon
Zkusil jsem ještě přidat jeden návrh, změnu Nette\Web na Nette\Http a odstranění prefixů Http u tříd jako HttpResponse nebo HttpRequest. Pro verzi 5.2 by se zachoval původní název.
Upravené jmenné prostory budou ve větvi namespaces
- Filip Procházka
- Moderator | 4668
David Grudl napsal(a):
ad Presenter, Control a AppForm: tohle by mělo být v nějakém Nette\Application\Něco, ale zatím v tom nemám jasno.
Nette\Application\Component?
Nette\Application\Component\Presenter
Nette\Application\Component\Control
Nette\Application\Component\AppForm
Nette\Application\Control?
Nette\Application\Control\Presenter
Nette\Application\Control\Control
Nette\Application\Control\AppForm
Nette\Application\Controllers?
Nette\Application\Controllers\Presenter
Nette\Application\Controllers\Control
Nette\Application\Controllers\AppForm
Nette\Application\Presentation?
Nette\Application\Presentation\Presenter
Nette\Application\Presentation\Control
Nette\Application\Presentation\AppForm
…
- Mikulas Dite
- Člen | 756
UI
není přesný, protože o UI stará především view,
nikoliv presenter/control.
Presenter
, Control
i AppForm
se
starají o interakci uživatele a modelu. Ideál by byl \Control
,
ale protože už je Control
třída, nepřichází v úvahu. Co
takhle to pojmenovat Nette\Application\Interaction
?
- PetrP
- Člen | 587
Tak já to teda řeknu.
Nebude se vám to líbit.
Určitě si vyškubáte všechny vlasy.
MINISTERSTVO ZDRAVOTNICTVÍ VARUJE:
Následující text může vyvolat zvracení a silné průjmy.
(V rámci zmírnění trvalých následku je kritický text přeškrtnut
černou čarou.)
Proč se nepoužije jen jeden namespace: Nette\
?
Tak a teď na to zapomeňte a pokračujte v rozmělňování ;]
- Ondřej Mirtes
- Člen | 1536
PetrP: Ano, na jmenné prostory (aka balíčky aka moduly) jsem pohlížel taky jen jako na způsob, jak se vyhnout jmenným kolizím. Ale to bychom je nevyužili jaksi OOPově – viz princip low coupling) a high cohesion).
- pracj3am
- Člen | 14
Pokud se držíme zásady, že ve FW nejsou dvě třídy se stejným názvem,
postrádá podle mě zjemňování NS smysl. Vlastní NS bych vyčlenil pouze na
funkční celky, které je ev. opravdu možné používat samostatně jako
Database
, Forms
, Templates
. Rozhodně
bych nezaváděl jmenné prostory Core
, Utils
,
Iterators
, DependencyInjection
, Loaders
,
Localization
, Reflection
. Tedy proč psát NS, když
už je „obsažen“ v názvu třídy – IMO by mělo být buď
Nette\Loaders\Robot
nebo Nette\RobotLoader
.
- paranoiq
- Člen | 392
rád se ke kritice připojím
velejemné jmenné prostory pouze přidělají práci těm, kdo
nepoužívají pokročilá API (například mě!). těm kdo používají,
zkomplikují práci při úpravách. delší jména – více práce při
čtení kódu. samozřejmě, že většina případů se vyřeší klausulí
use
, ale proc věci zbytečně komplikovat?
jediným skutečně opodstatněným účelem jmenných prostorů je
zabránění kolizi jmen při použití více knihoven od různých autorů.
tento problém řeší už namespace \Nette
.
pak jsou tu, jak píše pracj3am, případy, kdy NS obaluje nějaký funkční celek. nacpání věcí, která zdánlivě souvisí do jednoho NS ale není totéž jako vytvoření funkčního celku. např. i když Json, Neon a dejem tomu Latte jsou parsery, v podstatě spolu jinak nesouvisí a není tedy vhodné, aby spolu sdílely společný jmenný prostor. to samé platí třeba pro Application\Responses, Form\Controls, Database\Drivers atp. v žádném z těchto případů nejde o zapouzdření funkčního celku ale pouze o zbytečnou katalogizaci
bujení jmenných prostorů naráží na princip KISS. a ten bych osobně před katalogizací/dokumentací upřednostnil. jmenné prostory nemají sloužit jako manuál, který popisuje vnitřní struktury knihovny. od toho tu má být manuál opravdový
- potapnik
- Člen | 127
Souhlasím s paranoiqem. Jediný opodstatněný namespace je \Nette. Zjemňování přidává práci, znepřehledňuje kód a hlavně se blbě pamatuje, jestli je Router v \Nette, \Nette\Routing. Víceménně taky dost pochybuju o tom, že budou mít jemné namespaces v Nette konečnou podobu. Vzhledem k bouřlivému vývoji za poslední dva roky, kdy je Nette veřejné, předpokládám rovněž bouřlivý vývoj dále. Vlastně když si tady čtu sálodlouhé příspěvky na téma: má mít Neon vlastní namespace, připadá mi to už trochu moc akademický a kavárenský kecání. Speciálně u Neonu to přece může bejt vlastní knihovna v libs ne? ;-) Ale to odbočuju. Nezamotávejte se v bludných kruzích namespaces, jeden jediný jmenný prostor přece stačí. Jestli má mít nějaká část vlastní, šup s ním z frameworku ven do vlastní knihovny. Ale abych při psaní řešil v jakym namespace tohodle frameworku to mám hledat? Občas potřebuju rychle upravit jednu dvě věci, přidat drobnej příkaz, ale nehodlám a nechci pátrat, kde je zrovna Nette\Config\Config, jestli se náhodou po akademický diskusi nepřesunul pod \Nette\ConfigurationEasyBaby…jak říká paranoiq, je to stále ještě směr KISS?
- jtousek
- Člen | 951
Zajímavé názory, ale dovolte mi zmínit jednu věc. Není to tak dávno, co se na GitHubu objevily aliasy pro všechny Nette třídy, např Nette\Application\Presenter měl alias NPresenter. IMHO je pro ty kdo nepoužívají nebo nechtějí používat složité API přesně tohle ideální a proto to taky ve frameworku nějakou dobu bylo. Proč se to neprosadilo?
- Honza Marek
- Člen | 1664
Zjemnění jmenných prostorů neznamená vždycky prodloužení názvu třídy. Naopak ten základní název třídy často bývá bez namespaců mnohem delší. Například takovému názvu Nette\Web\HttpUploadedFile moc prospělo, že se změnil na Nette\Http\UploadedFile. Souhlasím s tím, že název jmenného prostoru by se pokud možno neměl opakovat v části názvu třídy. Ale neřešil bych to zrušením jmenného prostoru.
Každopádně už mě ta diskuze o jmenných prostorech taky přestává bavit. Současný návrh je trochu konzistentnější než dřívější stav, kdy to, jestli je něco ve vlastním jmenném prostoru, záviselo pouze na historických důvodech. (I když se obávám, že se to může stát znovu.) David asi hned tak nepřijme můj styl práce se jmennými prostory, takže nedává smysl mrhat energii na další diskuzi a vysvětlování :)
- jasir
- Člen | 746
jtousek napsal(a):
Zajímavé názory, ale dovolte mi zmínit jednu věc. Není to tak dávno, co se na GitHubu objevily aliasy pro všechny Nette třídy, např Nette\Application\Presenter měl alias NPresenter. IMHO je pro ty kdo nepoužívají nebo nechtějí používat složité API přesně tohle ideální a proto to taky ve frameworku nějakou dobu bylo. Proč se to neprosadilo?
Taky by mě to zajímalo. Todlencto „zjemňování“ mě trochu děsí… více zde
- westrem
- Člen | 398
potapnik:
připadá mi to už trochu moc akademický a kavárenský kecání
Exactly! Nemozem si pomoct ale pride mi, ze sa tu uz nejaku dobu dohadujeme
o nepodstatnych veciach a rozoberaju sa uz len osobne preferencie diskutujucich
(ja by som ale predsa len dal tak, to je istotne lepsie lebo to tak ja pouzivam
apod). Zaujimavy nazor je tiez mat len jeden NS Nette
. Mat len
jediny NS je podla mna zase extrem z druheho konca (mat detailnucko rozdelene
triedy podla toho ako cool su) ale z praktickeho hladiska je podla mna lepsie
mat NS len na logicky samostatne vecsie celky a zo zvyskom nerobit cavyky (nerad
by som bol aby to skoncilo ako v Jave kde co package to directory a clovek
potom pise siahodlhe NS – nezabudat na fakt ze sucastne IDE nestihaju dobu a
nedokazu doplnat use
statemenst v PHP kode podla toho co
pouzivam).
jtousek:
co se na GitHubu objevily aliasy pro všechny Nette třídy
Pokial viem tato featura bola revertnuta a stiahnuta tymto commitom:
https://github.com/…59a984d082ce
Honza Marek:
David asi hned tak nepřijme můj styl práce se jmennými prostory
Ehm, prepac, ale preco by mal? Je snad tvoj styl prace s NS ten jediny spravny a preto musi byt sucastou Nette?
- redhead
- Člen | 1313
Honza Marek:
David asi hned tak nepřijme můj styl práce se jmennými prostoryEhm, prepac, ale preco by mal? Je snad tvoj styl prace s NS ten jediny spravny a preto musi byt sucastou Nette?
Podle mě myšleno tak, že každý má svůj vlastní „správný“ způsob. Stejně tak, každý má svou vlastní pravdu. Jde prostě o to, že každý je navyklý na něco jiného, každému sedí něco jiného. Já tu prakticky souhlasím s Ondřejem Brejlou a Honzou Markem, ale to je jen můj (náš) pohled na to, jak je to pro nás „správně“.
Vzhledem k tomu, že jsme se dopracovali k jisté dohodě (kompromisu), kromě snad jediného Neonu, tak mi nezbývá než říct, že už mi je to vcelku jedno. Jedna třída mě nezabije a nebudu jí používat tak často, abych s její NS byl nějakým způsobem nespokojen.
EDIT: míchají se mi 2 thready o NS dohromady, něco sem nepatří :)
Editoval redhead (8. 2. 2011 23:09)
- Ondřej Brejla
- Člen | 746
Přesně jak říká redhead. Já už své řekl, snažil se to vysvětlit a David to myslím pochopil. To, že s tím třeba nesouhlasí je věc jiná.
Spíš mi přijde, že doba návrhů a věcného vysvětlování před 2 dny pominula a teď se tu akorát haní úvodní myšlenka a útočí na názory druhých argumenty typu „vždyť je to celé hloupost, stačí jeden ns“, případně „tvuj styl je jediny spravny a proto musi…?“. Možná je to jen můj pocit (hlavně ať se nenajde nějaký flame war master, co to bude zas zbytečně rozmazávat, to opravdu netřeba;-)
Mno každopádně to neva:-) Diskuse to byla zajímavá, hlavně na začátku, a teď už budu jen sledovat, jak to všechno dopadne:-)
Edit: já už oba thready beru jako jeden:-)
Editoval Ondřej Brejla (8. 2. 2011 23:24)
- jtousek
- Člen | 951
@westrem: Ano, skutečně ta featura byla zrušena, ale nějakou dobu ve frameworku byla. A stejně to nikdo nepoužíval.
@HosipLan Nápodobně. :D Já osobně bych ty prefixy nepoužíval, ale by je někdo chtěl tak žádnou nekompatibilitu to nevytváří takže mi nevadí.
Sám ty prefixy považuju za špatnou cestu, což je imho i důvod, proč se neprosadily. Jinými slovy zjemňování (pokud se nebude zbytečně přehánět) je správná cesta.
- hason
- Člen | 23
westrem napsal(a):
nerad by som bol aby to skoncilo ako v Jave kde co package to directory
Tento přístup je čím dál tím více používán pro práci s jmennými postory v PHP. Je to „standard“ označovaný jako PEAR/PSR-0 http://groups.google.com/…nal-proposal, který se možná dostane přímo do SPL knihovny http://wiki.php.net/…lclassloader. Mnoho nových PHP 5.3+ knihoven používá PSR-0, protože je to přirozený způsob práce s jmennými prostory, jak píše Matthew Weier O'Phinney http://weierophinney.net/…-Matter.html.
Editoval hason (9. 2. 2011 10:52)
- paranoiq
- Člen | 392
Ondřej Brejla napsal(a):
Spíš mi přijde, že doba návrhů a věcného vysvětlování před 2 dny pominula
(tím že do diskuze vstoupili ti, kteří nezastávají ten jediný správný názor)
a teď se tu akorát haní úvodní
(nezpochybnitelně správná)
myšlenka a útočí na názory druhých
prosím vysvětlete mě někdo, jaký je pro programátora konkrétní praktický přínos katalogizačních jmenných prostorů (těch co jen seskupují podobné třídy, které ale netvoří funkční celek. viz můj předchozí příspěvek). protože v předchozí debatě zazněl tak maximálně argument „nevadí mi, protože mi je napoví IDE“, což určitě nelze považovat za argument pro jejich zavedení
@Ondra: neber to prosím tak, že na tvůj názor útočím, nebo haním nějakou myšlenku ;-)
- Patrik Votoček
- Člen | 2221
hrach napsal(a):
jtousek: A jak víš, že ji nikdo nepoužíval??? prosím tě, hlavně nedělej závěry podle sebe. já ji teď chvíli používal.
Třeba tak že po jejich odstranění nikdo nikde nekřičel že to používá (pokud se mílím oprav mě).
Btw nechcete se přestat navzájem hanit a mluvit neustále dokola o „jediné správné cestě“? A přejít opět zpět ke konstruktivní diskusi (nebo raději mlčet)?
Editoval Patrik Votoček (9. 2. 2011 20:49)
- Tharos
- Člen | 1030
hrach: Já Tě chci v téhle věci podpořit. :) Implikace „tohle mi připadá jako blbost“ ⇒ „tohle nikdo nepoužívá“ je bez jakýchkoliv podkladů jenom výkřik do tmy. Jenom tohle fórum má momentálně přes 1800 uživatelů, ale aktivně zde diskutuje tak 100 lidí? Počet uživatelů Nette mimo fórum bude ještě větší. Nelze nic namítnout proti rozhodnutí, že „tudy vývoj prostě nepůjde“, ale nelze to odůvodnit tak, že „tohle přece nikdo nepoužívá“. To nikdo neví.
P.S. Já třeba většinu projektů kvůli firemním serverům píši v prefixed verzi pro PHP 5.2. Vím, že to není „cool“, ale tak nejsem snad kvůli tomu méněcennej :). A kdyby David například úplně zrušil prefixed verzi proto, že „to není cool, nemá to budoucnost, stejně to nikdo nepoužívá“, byla by to pro mě komplikace.
- Patrik Votoček
- Člen | 2221
hrach napsal(a):
Vrtak: napsal jsem comment k danému commitu, ale to je jedno.
A byl jsi jedinný… Kdyby to lidem doopravdy trhalo žíly tak by se jich ozvalo více (ale spíše to bude tím že to nebyla stable verze).
Jde mi jen o to nedělat závěry, aniž by někdě byla anketa, či někdo měl (krom Davida) dostupné čísla o počtu downloadu jednotlivých verzí (5.2, prefixed, 5.3)
Pokud se někdo něco používá a ty mu to sebereš tak se ozve „kam to zmizlo?“. Viz nedávný Davidův experiment s odebráním prefixované verze Nette z download stránek. Kde se lidi začaly ozívat a tak byla navrácena zpět (to jasně ukazuje že anketa není vždy nutná).