Jmenné prostory – Last Call Announcement

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

David Grudl napsal(a):

Jsem pro Nette\Application\Responses\ForwardingResponse. Sám to používám, když mám skupinu tříd, které dělají podobnou činnost (responses, Iterators, …).

Jsem pro Nette\Application\Responses\Forward :-)

Není to proti pravidlu a) ?
Přijde mi to stejné jako:

chybně: Nette\Application\Responses\Download – nelze dovodit, že Download je odpověď

Edit: Byl jsi rychlejší :-)

Editoval Semik (7. 4. 2011 8:40)

kravčo
Člen | 721
+
0
-

Začínam mať pocit, že si z nás robíš prdel :) go on!

FunctionReflectionNette\Reflection\Function – toto asi nepôjde, škoda, toto nám kazí viaceré jednoslovné pomenovania…

namespace Nette\Reflection;

class Function extends \ReflectionFunction // PHP Parse error: ...
{
}

Myslím, že Nette\Application\Responses\File a jemu podobné štruktúrovanie je síce nejednoznačné ale verím, že používa namespaces veľmi dobre. Mám k odpovediam ľahký prístup pomocou use Nette\Application\Responses;, a následne píšem Responses\File. Napíšem sa oveľa menej ako v predošlej verzii.

Odbočím: nepripadá vám to množné číslo umelé? Nechceme predsa kategorizovať, ale dať triedam čo možno najkratší názov, pričom budú oddelené funkčné celky. use Nette\Application\Response; return new Response\File.

Na druhej strane, pokiaľ to nebude celoplošné, bude to WTF (prečo táto trieda z Nette\Responses\ nemá suffix Response ale GenericRecursiveIterator z Nette\Iterators\ áno? podľa čoho viem, že tam suffix je alebo nie je? A prečo je to rôzne aj v samotnom Nette\Iterators\? v budúcnosti bežný používateľ Nette nebude poznať pravidlo a))

tipy:
AutoLoaderNette\Loader\Nette :)
RenderResponseNette\Application\Response\Text
RoutingDebuggerNette\Application\Routing\Debugger
DebugNette\Debugger
DebugPanelNette\Debugger\DefaultPanel
IDebugPanelNette\Debugger\IPanel
DebugHelpers → Nette\Debugger\Helpers

na záver:
IComponentNette\IComponent
ComponentNette\Component
IComponentContainerNette\Component\IContainer
ComponentContainer → Nette\Component\Container

A… som jediný, ktorému pripadá namespace DI úplne mimo?


Doplnené:

namespace Nette\DI zrušiť (pretože mne príde čiste kategorizačné)

CacheNette\Cache
ICacheStorageNette\Cache\IStorage
ICacheJournal → Nette\Cache\IStorageJournal

V duchu mojich predošlých tvrdení by mohlo byť i namespace Nette\Exception:
InvalidStateExceptionNette\Exception\InvalidState
NotImplementedExceptionNette\Exception\NotImplementedFeature
NotSupportedExceptionNette\Exception\NotSupportedFeature
DeprecatedExceptionNette\Exception\DeprecatedFeature
MemberAccessExceptionNette\Exception\InvalidMember
FatalErrorExceptionNette\Exception\FatalError
… čo ale robí problém pri výnimkách hlbšie v štruktúre.

… Takže predsa len zametáme, akurát do Nette\Utils :)

na prvý pohľad je zdanlivá nekonzistentnosť v Nette\DateTime a Nette\Utils\String, lenže je treba povedať, že sa jedná o triedy s dosť odlišnou funkcionalitou. Kým Nette\DateTime objektovo reprezentuje dátum a čas, Nette\Utils\String reprezentuje súbor funkcií na prácu so stringami…
viem, že sa to už raz nedoriešilo, ale naozaj by nešlo Nette\Utils\String::<func>()Nette\String\<func>()?

Editoval kravčo (7. 4. 2011 11:48)

jtousek
Člen | 951
+
0
-
  • Ty iterátory se mi nyní zdají poněkud podivné. Někdy v nich je slovo Iterator, jindy zase ne. Mělo by se to sjednotit.
  • Myslel jsem, že rušíš ingové tvary (CachingIterator, Nette\Latte\CachingHelper, Nette\Caching\...). Nebo to slovo Caching jako jediné zůstane takto?
  • AppFormForm +1, Form a AppForm jsem v jednom skriptu v životě nepoužil a nevidím k tomu žádný rozumný důvod. Nijak to tedy neodporuje pravidlu c).
  • RenderResponseNette\Application\Responses\TextualOutput se mi ale opravdu nelíbí. Když už tak Nette\Application\Responses\String (nebo Nette\Application\Responses\Text).
  • Nette\Application\UI\PresenterLink bych zkrátil na Nette\Application\UI\Link, k čemu tam je to slovo Presenter? Odkazovat mohu přece i na komponentu, ne?
  • DebugDebugger +1, IMHO to lépe vystihuje podstatu.
  • LimitedScopeNette\LimitedScope je v tom postu 2×. ;-)
  • Nemělo by se celé Latte přesunout do Templates? Bez šablon přece k ničemu není, nebo ano?
  • Pokud čistíme jmenný prostor Nette tak Nette\HtmlNette\Utils\Html a Nette\DateTimeNette\Utils\DateTime.

EDIT1:

kravčo napsal(a):

Odbočím: nepripadá vám to množné číslo umelé? Nechceme predsa kategorizovať, ale dať triedam čo možno najkratší názov, pričom budú oddelené funkčné celky. use Nette\Application\Response; return new Response\File.

S tím naprosto souhlasím. :-)

tipy:
AutoLoaderNette\Loader\Nette :)
RenderResponseNette\Application\Response\Text
RoutingDebuggerNette\Application\Routing\Debugger
DebugNette\Debugger
DebugPanelNette\Debugger\DefaultPanel
IDebugPanelNette\Debugger\IPanel
DebugHelpers → Nette\Debugger\Helpers

S tou RenderResponse souhlasím. Ale ten zbytek… to myslíš vážně? :-)

EDIT2:

  • Nette\Reflection\FunctionParameter – jaký význam zde má to slovo function? Může to být stejně dobře metoda. Nette\Reflection\Parameter si stejně nikdo s ničím splést nemůže.

Editoval jtousek (7. 4. 2011 10:29)

Nox
Člen | 378
+
0
-

Nette\Application\Responses\String bez NS → String zní spíš jako/se může plést se String helper třídou a odporuje a), tak StringResponse?

Osobně bych tu délku až tak nehrotil, stejně to doplní IDE, často stačí napsat 2 znaky…

jtousek
Člen | 951
+
0
-

Nox: Chápu, v tom případě bych ale volil spíše Text, protože z ostatních responses už to slovo Response zmizelo a nechat ho pouze v jednom případě nedává smysl.

Honza Marek
Člen | 1664
+
0
-

kravčo

Taky mi všude ty množný čísla nějak rozčilujou… Na DI se ti nezdá název nebo to, že to existuje? Pokud se to týká názvu, taky bych tam nedával zkratku, ale napsal to v plné verzi DependencyInjection.

kravčo
Člen | 721
+
0
-

Honza Marek napsal(a):

Na DI se ti nezdá název nebo to, že to existuje?

To že to existuje, doplnil som svoj pôvodný príspevok

Jan Tvrdík
Nette guru | 2595
+
0
-

Nejnovější kravčovi nápady mi přijdou vyloženě šílené :)

jtousek
Člen | 951
+
0
-

Jan Tvrdík napsal(a):

Nejnovější kravčovi nápady mi přijdou vyloženě šílené :)

jj, mám pocit, že pro něj 1. duben ještě neskončil. :)

hrach
Člen | 1838
+
0
-

když čtu ty vaše navrhy, tak jsem vždycky rad, že David to většinou dělá podle sebe :D
Response\Text? tripple wtf? a co když to budou čísla =P

David Grudl
Nette Core | 8218
+
0
-

Vím, že poslední návrh vypadá jako úlet, ale zdá se mi to jako úlet dobrým směrem. Stále dodržuje pravidlo a) s podmětem (tj podstatné jméno v 1. pádě) a vede ke kódu, který je jazykově přirozený (presenter jako odpověd poslal soubor vs. Presenter poslal souborodpověď vs. Presenter poslal staženíodpověď) a šikovně dokáže pracovat s use, viz kravcovo Response\File nebo třeba Latte\Filter či Http\Request.

Chce to jen doladit detaily a bude to mega fasa coool!

Filip Procházka
Moderator | 4668
+
0
-

To je otřesné :) Nechceš si na to přemýšlení vzít ještě pár týdnů a pak založit „Last Last Call“? Při psaní názvu třídy od půl namespace skřípu zuby. Strašně mi to vadí, buď celý namespace, nebo jenom třída.

Já si vždycky myslel, že třída se má jmenovat podle toho co dělá, nebo představuje. Není to tak dávno, co jsi se urputně bránil stylu Symfony. Když už teda podléháš, tak alespoň podléhej většině. https://github.com/…pping/Driver Většina to dělá takhle (a teď nemám na mysli to, že název třídy odpovídá složce, to v dobách RobotLoaderu není vyžadováno)

./Doctrine/ORM/Mapping/Driver/XmlDriver.php => Doctrine\ORM\Mapping\Driver\XmlDriver;

Byť mi přijde, že popisnější by to bylo v namespace Drivers. Voni ti kluci co napsali Symfony (nebo Doctrine, …) taky nebudou úplně vypatlaní…

Editoval HosipLan (7. 4. 2011 14:59)

Honza Marek
Člen | 1664
+
0
-

Názvy typu Nette\Response\File, Nette\Latte\Filter, Nette\Http\Request apod. se mi líbí. Kdysi jsem se tady na podobných snažil ukázat, že podrobnější namespacy nemusí nutně vést k více psaní. Ale nevim, jestli jsem byl onehdá úplně pochopen.

Ondřej Mirtes
Člen | 1536
+
0
-

Response\Text je nesmysl, ve mně to evokuje odezvu s typem text/plain. Nechal bych to tedy jako Render, protože je v ní echo.

bojovyletoun
Člen | 667
+
0
-

Pro mě je důležitý, aby název třídy vystihoval, o co jde, takže RenderResponse je OK, ale Text ne. Na začátku vypíšu use use use a dál mám klid a jsem rád, když názvy tříd jsou popisné

David Grudl
Nette Core | 8218
+
0
-

HosipLan napsal(
teď nemám na mysli to, že název třídy odpovídá složce, to v dobách RobotLoaderu není vyžadováno)

Jak se říká, jen blbec nemůže změnit názor, avšak v tomto případě vůbec nevím, co se snažíš říct. Buď konkrétní.

David Grudl
Nette Core | 8218
+
0
-

Ještě aby nedošlo ke zmatení. Příklad:

  • ArrayIterator → SPL\Iterator\Array ŠPATNĚ
  • FilterIterator → SPL\Iterator\Filter DOBŘE

Vnímáte ten rozdíl?

grey
Člen | 94
+
0
-

Jsem pro Nette\Exceptions a přejmenování AppForm na Form

Filip Procházka
Moderator | 4668
+
0
-

Se změnou názora máš samozřejmě pravdu Davide. Nejspíš jsem spatlal moc myšlenek, do moc málo vět :) Tvrdím, jako Bojovyletoun, že název třídy by měl být dostatečně popisný (!= zbytečně dlouhý), část názvu by měla být v namespace, ale funkce třídy (request) a odlišení od ostaních funkcí (http) by měla být v názvu. Namespace nepovažuju za název třídy, ale za zařazení nějaké logiky do balíku/skupiny podobných/souvisejících funkcí.

V logu od 15:37 do 16:14 je to rozepsané do víc než dvou vět.

Editoval HosipLan (7. 4. 2011 17:43)

Jan Tvrdík
Nette guru | 2595
+
0
-

David Grudl wrote:

Ještě aby nedošlo ke zmatení. Příklad:

  • ArrayIterator → SPL\Iterator\Array ŠPATNĚ
  • FilterIterator → SPL\Iterator\Filter DOBŘE

Vnímáte ten rozdíl?

Ne. (Třída se nemůže jmenovat Array, ale to předpokládám, že není ten důvod, proč je první varianta špatná.)

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Tyhle „rozebrané“ namespacy a krátké názvy tříd podle mě využívají to nejlepší, co mohou jmenné prostory přinést. Buď prostě vím, o čem daná třída, kterou píšu, je a co za další třídy vyžaduje, a klidně si nechám krátký název (klidně i ten Text/Render nebo cokoliv), nebo mi to přijde příliš zmatené, a zcela bez problémů mohu použít Response\Text – popisné, přehledné a zároveň flexibilní jak sviňa.

Mně namespace určitě přijde jako součást názvu třídy – s tím, že mohu pomocí jednoho řádku na začátku skriptu používat kratší verzi toho názvu. Přijde mi, že kategorizační/balíčkovací funkce je určitě možnost, jak jmenné prostory využít, ale až druhotná – prvotní je pohodlnější (kratší) zápis názvu třídy.

paranoiq
Člen | 392
+
0
-

zapisovat namespace od půlky mě doteď nenapadlo a docela se mi to líbí (Response\File, Latte\Filter, Http\Request). názvy jsou tak popisné, jak je komu libo. zkracovači si to můžou zkrátit. ti co se v tom chtějí vyznat napíšou poslední dvě části názvu. neporušuje se pravidlo duplicity. mezi FileResponse a Response\File je rozdíl jediného znaku. samá pozitiva a jistoty…

upozornění: nejde to dohromady s množným číslem u katalogizačních ns: Driver\Mysql je určitě lepší než Drivers\Mysql

Editoval paranoiq (7. 4. 2011 20:02)

David Grudl
Nette Core | 8218
+
0
-
  • ArrayIterator → SPL\Iterator\Array ŠPATNĚ
  • FilterIterator → SPL\Iterator\Filter DOBŘE

Vnímáte ten rozdíl?

Ne.

Jak nazvat iterátor, který filtruje prvky? Co to je? Filtr? Jasně, je to Filtr.

Jak nazvat iterátor, který iteruje nad prvky pole? Je to pole? To stěží, je to iterátor. Je to stále iterátor nad pole, ArrayIterator.

David Grudl
Nette Core | 8218
+
0
-

kravčo napsal(a):

FunctionReflectionNette\Reflection\Function – toto asi nepôjde, škoda, toto nám kazí viaceré jednoslovné pomenovania…

Class a Function to kazí, co s tím?

*Odbočím: nepripadá vám to množné číslo umelé?

Hodně mi to připomíná (nerozhodný) problém jednotných a množných čísel u DB tabulek.

podľa čoho viem, že tam suffix je alebo nie je? A prečo je to rôzne aj v samotnom Nette\Iterators\? v budúcnosti bežný používateľ Nette nebude poznať pravidlo a))

Někdy prostě neexistují jednoslovné názvy jako Button, Checkbox a musí se použít přídavné jméno + podstatné jméno, jako HiddenField. Ten přitom nikomu nevadil. Takže v tom nevidím tak zásadní problém. BTW: Lze nazvat RecursiveIterator jako Recursor?

CacheNette\Cache
ICacheStorageNette\Cache\IStorage
ICacheJournal → Nette\Cache\IStorageJournal

Spíš bych držel jedno téma vždy v jednom NS. I kvůli dokumentování. Případ Nette\Cache a podobných se dá považovat za jakousi default třídu NS, takže bych spíš uvažoval jen o vytváření jejich pevných aliasů.

V duchu mojich predošlých tvrdení by mohlo byť i namespace Nette\Exception:
InvalidStateException → Nette\Exception\InvalidState

Tady (a dalo by se to říct i v případě iterátorů) bude vhodnější dodržet konvenci PHP, ačkoliv logika věci by byla pro Nette\Exception\InvalidState (s rezervou: nevím, zda lze brát NotSupported nebo Deprecated za podmět).

… Takže predsa len zametáme, akurát do Nette\Utils :)
na prvý pohľad je zdanlivá nekonzistentnosť v Nette\DateTime a Nette\Utils\String.

Ano, trošku váhám se zametáním. Nicméně zrovna Nette\Utils\String je úplně špatně pojmenovaná třída a Nette\Utils\StringUtils je nepěkné, takže se stejně vrátím k Nette\StringUtils. BTW utils (užitečnosti) je asi lepší než tools (nástroje).

  • Pokud čistíme jmenný prostor Nette tak Nette\HtmlNette\Utils\Html a Nette\DateTimeNette\Utils\DateTime.

V případě Html to zvažuju, ale DateTime mi nesedí. Pokud čtu Nette\Utils\cosi jako cosiUtil, tak dělat objekt DateTimeUtil mi přijde divné, je to přece ryzí DateTime.

HosipLan napsal(a):

Tvrdím, jako Bojovyletoun, že název třídy by měl být dostatečně popisný (!= zbytečně dlouhý), část názvu by měla být v namespace, ale funkce třídy (request) a odlišení od ostaních funkcí (http) by měla být v názvu.

Bavíme se o velmi tenké hranici, mezi odlišením v rámci NS nebo odlišením v rámci všeho. Docela mi dostačuje odlišení v rámci NS.

vojtech.dobes napsal(a):

Tyhle „rozebrané“ namespacy a krátké názvy tříd podle mě využívají to nejlepší, co mohou jmenné prostory přinést.

Taky se mi zdá. Buď lze s NS bojovat, nebo je šikovně (vy|zne)užít.

jtousek
Člen | 951
+
0
-

Nicméně zrovna Nette\Utils\String je úplně špatně pojmenovaná třída …, takže se stejně vrátím k Nette\StringUtils

Proč je Nette\Utils\String špatně pojmenovaná třída? Nevidím rozdíl oproti např. Nette\Application\Responses\Json.

U výjimek i iterátorů mi připadá lepší dodržet PHP konvence, tedy slova Exception respektive Iterator na konci názvu třídy. A to bez ohledu na (ne)existenci vlastního namespace. Tedy žádný Recursor ačkoli ten název se mi líbí. :-)

David Grudl
Nette Core | 8218
+
0
-

Proč je Nette\Utils\String špatně pojmenovaná třída? Nevidím rozdíl oproti např. Nette\Application\Responses\Json.

„Aplikace vrátila JSON“ zní přirozeně.

Vidím rozdíl mezi třídou představující řetězec a třídou představující nástroje pro řetězce.

Yrwein
Člen | 45
+
0
-

David Grudl napsal(a):

Proč je Nette\Utils\String špatně pojmenovaná třída? Nevidím rozdíl oproti např. Nette\Application\Responses\Json.

„Aplikace vrátila JSON“ zní přirozeně.

Vidím rozdíl mezi třídou představující řetězec a třídou představující nástroje pro řetězce.

Když aplikace vratí JSON, budu si u JSONu představovat metody typu toArray, getValue($key) a podobně, nikoliv send. Aplikace imho nevrací JSON, ale JSONResponse, která teprve musí být odeslána metodou „send“ (a „send“ zároveň asi těžko je obecnou metodou JSONu, protože JSON nic neodesílá — to dělají jen třídy, které ho používají).

Podobně u FilterIteratoru (a asi dalších příkladů, které tady jsou uváděny) — Filter pouze vyfiltruje, FilterIterator při iterování filtruje (a dle toho se taky chová — tzn. má určité metody).

Edit: Smazána připomínka k délkám (…namespace a tříd… .]), ať neplevelím diskuzi.

Editoval Yrwein (11. 4. 2011 9:49)

Filip Procházka
Moderator | 4668
+
0
-

Davide, jestli chceš doporučovat práci se třídami ve tvaru Iterator\Filter atp, bylo by dobré, to dodržovat globálně, viz Response\Json. Sice se mi to nelíbí (nějaký mentální blok kvůli bůhvíčemu), ale nemám proti tomu argumenty. Tak to aspoň udělej konzistentní, díky :)

jtousek
Člen | 951
+
0
-

HosipLan: Mám podobný názor jako ty. Bohužel třeba u reflexí je to problém kvůli Function a Class. Podobně třeba Iteartor\Array. Takže by to úplně konzistentně ani nešlo a proto bych se do toho raději vůbec nepouštěl.

David Grudl
Nette Core | 8218
+
0
-

HosipLan napsal(a):

Tak to aspoň udělej konzistentní, díky :)

Jestli máš na srdci něco konkrétního, tak to napiš, fakt nevím, jak si tvé připomínky vyložit.

Filip Procházka
Moderator | 4668
+
0
-

Tak píšeš, že chceš prosazovat zápis Driver\Mysql ale v přehledu změn máš pořád Responses\Json, je to trochu matoucí :)

David Grudl
Nette Core | 8218
+
0
-

HosipLan napsal(a):

Tak píšeš, že chceš prosazovat zápis Driver\Mysql ale v přehledu změn máš pořád Responses\Json, je to trochu matoucí :)

Kde píšu že chci prosazovat Driver\Mysql? A co by mělo být místo Responses\Json? Se trošku snaž, to mám z tebe tahat jak z chlupaté deky?

Filip Procházka
Moderator | 4668
+
0
-

Ajaj to byl Paranoiq :) To je tak když člověk dělá 10 věcí zaráz… Mě už je to asi jedno, jak říkal Patrik, ať už to tam je:)

Honza Marek
Člen | 1664
+
0
-

David Grudl napsal(a):

A co by mělo být místo Responses\Json?

No přece Response\Json :-D

David Grudl
Nette Core | 8218
+
0
-

Nejrozumnější a nejpřirozenější by bylo zavést jmenné prostory obráceně, tj. místo Nette\Application\Response\Json používat Json\Responses\Application\Nette nebo InvalidArgument\Exception\Nette či Filter\Iterator\Nette. Výhodu to má i v tom, že by se všechny třídy jmenovaly Nette, tudíž by se programátor nemohl splést.

Cifro
Člen | 245
+
0
-

David Grudl napsal(a):

Nejrozumnější a nejpřirozenější by bylo zavést jmenné prostory obráceně, tj. místo Nette\Application\Response\Json používat Json\Responses\Application\Nette nebo InvalidArgument\Exception\Nette či Filter\Iterator\Nette. Výhodu to má i v tom, že by se všechny třídy jmenovaly Nette, tudíž by se programátor nemohl splést.

:D

Dlho sa o tom diskutuje. Urob to tak ako si urobil pri https://forum.nette.org/…aciho-jazyka a bude kľud :))

Patrik Votoček
Člen | 2221
+
0
-

moje řeč

redhead
Člen | 1313
+
0
-

Tak abych zase rozpustil ledy. Současný návrh je strašný.

Nette\Application\Responses\File myslíte vážně?? Až bude NB umět automatické psaní use a já budu moct napsat pouze (necelý) vlastní název třídy bez NS a pak Ctrl+Space, Enter, tak budu mít jako v kódu třídu File, která nemá se souborem vlastně nic společnýho, protože je to vlastně odpoveď serveru? To samé \Text atd.

Hodně věcí teď porušuje pravidlo a) a to nemyslím podstatným jménem, ale že nevystihují podstatu třídy bez uvedení namespace, což považuji za mnohem důležitější než že to musí být pods. jméno (například IRenderable je naprosto správný název interfacu)

Sice bych mohl napsat třídu s poslední úrovní NS, ale proboha proč?? Navíc tam budu mít ohavné lomítko. A nemluvte tady o délce, za chvíli nějaké use nebude muset psát vůbec.

Zamyslete se znovu nad tím, co tu obhajujete.

Šaman
Člen | 2659
+
0
-

Doufám, že mě 30. dubna neupálíte jako heretika a kacíře, když prohlásím, že mě by se nejvíc ze všeho líbil jediný namespace Nette :)

Vyřeší se tím problém neprefixované verze (obsazené třídy User a Image) a přitom by se všude jen napsalo use Nette a byl by od NS pokoj.. :)) A staré projekty by se docela snadno přepsaly.

Honza Marek
Člen | 1664
+
0
-

redhead: Ty to pořád srovnáváš s Javou. A ta má názvy všech tříd tak strašně dlouhý, že by se obešla i bez jmenných prostorů (packageů).

redhead
Člen | 1313
+
0
-

Určitě jsem ovlivněn Javou, ovšem vůbec nechápu důvod, proč tu navrhujete, co tu navrhujete a už vůbec nevidím žádný přínos. Kratší zápis? Pff.

Java používá package pro oddělení logických celků – java.net (třídy pro práci se sítí), java.io (pro práci se soubory, proudy, atd.), většinou se neopakují ani názvy package a třídy (třeba Responses\NecoResponse). Jde mi ale hlavně o popisnost těch tříd. Co mi řekne třída File nebo Text bez namespace? Nic.

V javě by si nikdo nedovolil udělat třídu java.io.readers.Buffered, protože radši budu číst o 6 znaků delší (co máte vůbec furt s tou délkou?) než mít naprosto dementní nicneříkající název.

A vůbec, nemusím se ani omezovat na Javu jako nějaký guru jazyk (FYI si to ani nemyslím), i .NET používá popisné názvy tříd.

Opravdu by mi i pouhé namespace Nette nevadilo, možná třeba pár podnamespaců pro logické oddělení – nějaké to Application, Templates, Utils apod. a dost (aby se páni neupsali). A spokojeni budeme všichni.

Editoval redhead (11. 4. 2011 20:22)

David Grudl
Nette Core | 8218
+
0
-

redhead napsal(a):

Tak abych zase rozpustil ledy. Současný návrh je strašný.

Nette\Application\Responses\File myslíte vážně?? Až bude NB umět automatické psaní use a já budu moct napsat pouze (necelý) vlastní název třídy bez NS a pak Ctrl+Space, Enter, tak budu mít jako v kódu třídu File…

A až bude NB umět automatické psaní use s poslední úrovní NS, bude problém vyřešen ;-)

…která nemá se souborem vlastně nic společnýho, protože je to vlastně odpoveď serveru?

No a taky je to soubor, a taky je to objekt (FileResponseObject).

Mimochodem, všiml sis problému ve slovech „je to odpověď serveru“? Pokud to je odpověď, pak by nemělo jít o implementaci rozhraní IResponse, ale o potomka třídy AbstractResponse (is-a vs -able or can-do). Jelikož proti IResponse nic nenamítáš, mohu ti rozporovat, že to vlastně odpověď serveru není ;) Je to soubor, jehož lze použít jako serverové odpovědi.

redhead
Člen | 1313
+
0
-

No a taky je to soubor, a taky je to objekt (FileResponseObject).

Držme se při zemi. Vynechme to, jak je to akademicky správně. Btw přemejšlíš už nad hodně velkejma kravinama – jsme programátoři a ne Ústav jazyka anglického.

Výhody:

  • kratší zápis

Nevýhody:

  • nepopisný název tříd (porušuje pravidlo a))
  • nekonzistence v případě názvů kolidujících s klíčovými slovy

Něco dalšího?

Jinak by mě docela, Davide, zajímalo, co přesně tě tak obrátilo, první návrh byl téměř bezchybný.

Mimochodem, všiml sis problému ve slovech „je to odpověď serveru“? Pokud to je odpověď, pak by nemělo jít o implementaci rozhraní IResponse, ale o potomka třídy AbstractResponse (is-a vs -able or can-do).

Nevšiml, protože to není můj problém (ale nejspíš tvůj).

Btw, nechceš prosím zavést nějaké nové klíčové slovo? Protože instanceof se dá použít i na rozhraní a rozhraní přece nemůžeme instancovat, takže to při čtení nedává smysl :)

Editoval redhead (11. 4. 2011 21:05)

David Grudl
Nette Core | 8218
+
0
-

redhead napsal(a):

Jde mi ale hlavně o popisnost těch tříd. Co mi řekne třída File nebo Text bez namespace? Nic.

Předně: těmto námitkám velmi dobře rozumím, protože stejným způsobem bych namítal sám, nicméně zajímavé je i oponovat.

K praktického hlediska je dokumentace java.io (platí i pro .NET) neúhledná hromada tříd rozdělená na tři skupinky interface, class, exceptions. Mnohem praktičtější by bylo rozdělení na okruhy Reader/Writer, InputStream/OutputStream a ostatní. Mohly by se označit nějakou Javadoc anotací. A tu by mohl respektovat nejen generátor dokumentace, ale i IDE, čímž by se zjednodušilo psaní tříd. To by byl jasný praktický přínos.

Primárně však chci říct, že určitý rozlišovací nedostatek v Javě vidím. V Nette ho rozhodně mít nechci a vlastně je jen otázka, jestli k tomu využít anotace nebo namespaces.

V javě by si nikdo nedovolil udělat třídu java.io.readers.Buffered, protože radši budu číst o 6 znaků delší

To je ale velmi, velmi zavádějící přirovnání. Jak si můžeš všimnout, taky nechci použít Nette\Iterators\Recursive.

David Grudl
Nette Core | 8218
+
0
-

redhead napsal(a):

Jaký bys vymyslel operátor na rozhraní? ;-)

redhead
Člen | 1313
+
0
-

Třeba udělat nový význam pro slovo implements.

if($neco implements IResponse) vypadá fáákt dobře.

Když už ses teda začal dál pitvat do Javy. Tak mu upřímně řekni co si budeš myslet o tomto kódu, když ho při procházení souboru najdeš:

File f = new File("a.txt");

Co? Abstrakce nad souborem „a.txt“? Ahá, ale bacha radši vyscrolluj nahoru, páč třída File je v package java.io.writer!

Co se týče toho Buffered, to jsem napsal schválně, protože to dodržuje stejný scénář (ano, vím, není to podst. jméno..), ale je to stejně tak nepopisný název třídy jako Response/File bez ns.

Ano, je dobré oponovat a sám jsem nad tímto způsobem ns také dost přemýšlel, ale když jsem si pak představil práci s takovýmto kódem, tak jsem to naprosto zavrhl.

Já v tom tolik výhod zas nevidím. Navíc, někteří psali, že budou psát: Response\File v čem je to jiné než psát FileResponse (bacha! o jeden znak kratší, whee).

Jan Tvrdík
Nette guru | 2595
+
0
-

Přestože je Responses\FileResponse delší než Responses\File, tak to napíši stejně rychle díky code completion. Zatím stále preferuji tu delší variantu, ale musel bych tak nějakou dobu programovat, abych se rozhodl definitivně.

jtousek
Člen | 951
+
0
-

if($neco implements IResponse) nedává smysl. Ten objekt přece nic neimplementuje, to ta třída. To bys rovnou mohl místo instanceof zavést extends. Vydíš ten nesmysl?

redhead
Člen | 1313
+
0
-

@Jan Tvrdík: vždyť ani to Responses\ nemusíš psát, proč taky? Stačí FileResponse s usem.

@jtousek: Taky pravda. Ale tohle byl jenom vtípek, zase to neberte tak vážně.

Napadl mě ještě hezký příklad:

GrapeSeedJuiceManager je manažer džusu z jadérek grepu. Když tam to Manager nebude, bude to jen džus z jadérek grepu. Tak a teď ta třída něco menežuje nebo ji můžu vypít? Ano mohl bych napsat NS Managers\, v čem ale pak bude rozdíl?

Editoval redhead (11. 4. 2011 22:06)