DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   PHP (http://www.devprotalk.com/forumdisplay.php?f=9)
-   -   PHP Namespace vs PEAR Naming Convention (http://www.devprotalk.com/showthread.php?t=9498)

MaxMagnus 25. 12. 2010. 12:56

PHP Namespace vs PEAR Naming Convention
 
Problem na koji sam naisao je sledeci. Pre 5.3 namespace-ova najcesci nacin resavanja problema sa imenovanjem klasa je bio PEAR NC, sa kojim sam se najvise susretao u Zend FWu. Primer:

Zend_Db_Table_Row

ovo je kasnije vrlo jednostavno prebaciti na NS \Zend\Db\Table\Row. Problem nastaje kod rezervisanih reci, konkretno Abstract i Interface. Dosta klasa nasledjuje nesto slicno Foo_Bar_Abstract (ili implemetira Foo_Bar_Interface) ali onda nastaje problem:

namespace \Foo\Bar;
abstract class Abstract
interface Interface

sto se tice Abstract "resenje" sam nasao (hvala i dejanr na istom predlogu) koristeci Base umesto Abstract ali mi sad ostaje probem sa Interface.

razmisljao sam se o FooInterface ali mi nije dovoljno "elegantno" (posto zelim da imam "jedinstveno" ime), bar za mene. Takodje i cesti predlozi po netu o koriscenju "I" (poreklom iz Hungarian notation) prefixa su mi pogresni (class Foo implements IFoo)

Sta DPT community misli o ovome? Hvala :)

ppavlovic 26. 12. 2010. 00:54

Vidi odgovore na isto pitanje: http://stackoverflow.com/questions/1...ing-namespaces

jablan 26. 12. 2010. 09:28

@MaxMagnus: Nisam radio sa OOP-om u PHP, ali generalno ne razumem poentu interfejsa koji se zove Interface ili apstraktne klase koja se zove Abstract?

ivanhoe 26. 12. 2010. 15:16

meni bi bilo logicno da ih nazoves Nesto_interface, ili jos bolje samo Nesto (a ocito je da je interfejs, jer interfejs moras da upotrebis na samo jedan tacno odredjeni nacin, ne mozes nikako da pomesas kad vidis kako je upotrebljen u kodu)

glavna mana madjarske notacije ili ovih sufixa/prefixa je sto ti presedne kad moras da kucas sva ta slova, niko ne zeli da mu ime klase ili interfejsa bude u 3 reda na ekranu, dugi nazivi usporavaju "skenirajnje" pogledom kroz kod... and it takes fun out of programmin' (bar sto se mene tice, osetim se previse korporativno :))...

jablan 27. 12. 2010. 15:48

Citat:

Originalno napisao jablan (Napišite 93389)
@MaxMagnus: generalno ne razumem poentu interfejsa koji se zove Interface ili apstraktne klase koja se zove Abstract?

Off Topic: ...osim ako nije u pitanju Rubi, gde postoji klasa Class :) ali to je zato što je ona u isto vreme i objekat.

bluesman 27. 12. 2010. 17:07

^ Nešto kao na primer StdClass ? Šteta što se u PHP-u niko nije setio toga :)

jablan 27. 12. 2010. 17:35

Ne baš. Koliko kapiram, stdClass je neka prazna klasa (ali ne i bazna klasa za sve ostale klase). BTW, šta znači ovo "std"? Mora da je nešto logično. :P

Rubijeva Class je klasa čije su ostale klase instance (npr. klasa String je instanca klase Class).

MaxMagnus 27. 12. 2010. 22:31

@jablan: kao sto i sam rekao nisi radio sa OOP pa ni ne shvatam tvoj post? na moje pitanje si odgovorio pitanjem... i trazio od mene da ti je objasnim koji motiv su kreatori Zend Frameworka imali kad su klase nazivali tako. ja sam uvek ucio da se ne koriste kljucne (rezervisane) reci, pa tako nemam tabele koje se zovu select, nemam klase koje se zovu Abstract i Interface... Licno a i na poslu za Abstract klase koristimo Base, posto to ima smisla. Nemam "resenje" za interfejse.

Meni se licno ne svidja prefixovanje sa I, jer se slabo "vidi"... Moze li neko da podeli svoja iskustva sa nama, kako ostali nazivaju svoje klase, i koliko ljudi koristi namespaces u PHPu?

Dragi Tata 27. 12. 2010. 22:46

Citat:

Originalno napisao jablan (Napišite 93423)
Off Topic: ...osim ako nije u pitanju Rubi, gde postoji klasa Class :) ali to je zato što je ona u isto vreme i objekat.

Smalltalk :1044:

ivanhoe 27. 12. 2010. 23:27

Off Topic: ja moram priznati da u jeziku poput php-a ne vidim potrebu za tolikim OOP formalnostima, base klasama, interfejsima i sl... meni se ta Zend filozfija ne dopada, ako hoces javu, programiraj u javi, nemoj od php-a praviti javu po svaku cenu... napravi se duboko stablo nasledjivanja, funkcije pozivaju fuinkcije, koje pozivaju funkcije, itd... i onda se cude zasto im se sajt vuce cim skoci poseta... just my 2 cents

jablan 27. 12. 2010. 23:34

Citat:

Originalno napisao MaxMagnus (Napišite 93437)
na moje pitanje si odgovorio pitanjem... i trazio od mene da ti je objasnim koji motiv su kreatori Zend Frameworka imali kad su klase nazivali tako.

Ama pitam iz radoznalosti, koja je realna situacija u kojoj nazoveš interface Interface a klasu Abstract u PHP-u, samo to. Nisam sad skapirao da li su to tvoji interfejsi i klase koji se tako zovu, ili Zendovi?

Citat:

Originalno napisao Dragi Tata (Napišite 93439)
Smalltalk :1044:

Heh, da, pretpostavljam da većina (svi?) pure-OOP jezici imaju tako nešto... :)

@ivanhoe: Ne znam da li tu ubrajaš i namespace-ove, ali oni itekako imaju smisla. Doduše taj smisao se gubi ako se postojeće funkcije ostave u globalnom NS-u.

MaxMagnus 28. 12. 2010. 00:36

@jablan: nisu moje klase, vec klase iz Zend FWa. u slobodno vreme pravim svoj licni FW po mom ukusu, pa sam od Zenda preuzeo par klasa (licenca dozvoljava) i preradio ih kako su meni odgovarale. Klase su pisane za php5 ali sa izlaskom 5.3 i mnogih prednosti i poboljsanja koje nudi, ja sam odlucio da u startu pocnem da koristim sve te prednosti...

tako sam radeci naisao na par klasa koje su pravile problem. neke od primera su:
Zend_Db_Adapter_Abstract
Zend_Controller_Dispatcher_Interface
Zend_Config_Writer_Array
Zend_Session_Namespace

sve ove klase koriste na kraju rezervisane reci tako da je prelazak na namespaces problem jer se dolazi do sledeceg stanja:

namespace Zend\Db\Adapter; class Abstract;
namespace Zend\Controller\Dispatcher; class Interface;
namespace Zend\Config\Writer; class Array;
namespace Zend\Session; class Namespace;

a ovo naravno ne moze... pretpostavljam da ce ZFW2 ovo takodje resiti na neki nacin, ali to je vec njihova stvar.

Jos jedna sitnica postoji, a to je da se cesto koristi ("zadnje") ime klase i za ime metoda. Primer je npr Zend_Application_Bootstrap koja ima metod bootstrap(). Prebacivanje na "class Bootstrap" dovodi do strict greske, posto su ime metoda i klase isti sto dovodi do toga da je __construct() "ponovljen" (php4 nacin)... ok, ovo je jednostavno resiti, samo sam naveo kao primer problema.

MaxMagnus 28. 12. 2010. 00:56

Citat:

Originalno napisao ivanhoe (Napišite 93443)
Off Topic: ja moram priznati da u jeziku poput php-a ne vidim potrebu za tolikim OOP formalnostima, base klasama, interfejsima i sl... meni se ta Zend filozfija ne dopada, ako hoces javu, programiraj u javi, nemoj od php-a praviti javu po svaku cenu... napravi se duboko stablo nasledjivanja, funkcije pozivaju fuinkcije, koje pozivaju funkcije, itd... i onda se cude zasto im se sajt vuce cim skoci poseta... just my 2 cents

ne razumem ovakav stav? MVC, Factory, Strategy... sve su to korisni patterni, koriste se u mnogim jezicima, predstavljaju best practice u razvoju aplikacija. Duboko stablo nasledjivanja. sta to znaci? 27 nivoa dubine! funkcije koje pozivaju funkcije? pa zar to nije osnova ponovne upotrebljivosti koda. zar treba ja sve da ih pozivam sam... jasno mi je ako se pishe neki CLI skript, da je glupo dizati full stack FW za neki prosto zadatak. ne gadim se ja od proceduralnog programiranja u PHPu, daleko od toga, ali razvoj FWa je isto sto i kutija alata za jednog auto mehanicara.

sto se tiche dubine stabla nasledjivanja, prizajem da sam i ja svojevremeno znao da pretaram, ali cak ni tad nisam isao nesto extremno "duboko". sad kad je nivo veci od 3-4 (ne racunajuci base name, kao npr Zend) stanem, ponovo pregledam kod i preradim stvari. naravno ovaj problem je mnogo "manji" prelaskom na namespaces...

kad se nekome sajt vuche, ne mislim da to ima samo veze sa ovim stvarima koje si ti naveo. ako neko ne zna da isprojektuje aplikaciju ili bazu, apsolutno je nebitno ovo sto si ti napisao. vidjao sam aplikacije koje za proste stvari izvrse stotine (100+) SQL upita samo da bi prikazale 100 rekorda iz baze. mislim stvarno :D... pa sve preko 5 upita po "standardnoj" strani nema smisla...

ivanhoe 28. 12. 2010. 00:56

Off Topic: @jablan: namespace je super dodatak, jedino je IMHO debilno sto su izabrali backslash. I da ne ispadne da pljujem po OOP pristupu, interfejsi su ok za velike projekte tipa Zenda, kao i cela ta OO hijerarhija, samo IMHO treba to raditi sa mozgom i prakticno, da pomaze, a ne da bude objekata radi...


@maxmagnus: a sto ne bi spojio zadnja 2 dela? Meni to deluje kao najlogicnije... Zend\Controller\Dispatcher\ a klasu nazoves Dispatcher_Interface, pa ce ti onda posle biti class Moj_dispatcher implements Dispatcher_Interface {...} sto je prilicno jasno

EDIT: @maxmagnus: izvini nisam video tvoj odgovor odmah, a i delom sam vec napisao Jablanu iznad: ne kazem naravno da je OOP los, samo da ljudi, narocito kad dodju iz drugih jezika kao java ili C++ ili sveze sa faxa imaju tendenciju da naprave sistem koji je nepotrebno komplexan (za ono sto php obicno sluzi). A sto je sistem kompleksniji to vise do izrazaja dodju propusti u arhitekturi, pa onda bude nocna mora dok prvo pohvatas kako uopste cela stvar radi, a posle gubis vreme trazeci po stablu nasledjivanja koje metode gde postoje, u milion fajlova, i na kraju umesto da bude lakse i brze za razvoj bude bas obrnuto, vecinu vremena trosis rvuci se sa manama sistema. I postoji problem sa performansama, jer je php spor u radu sa pozivima funkcija generalno, a posebno metodama koje su zakopane u parent klasama... funkcije koje pozivaju funkcije su ok, ali ako imas 10 nivoa konstruktora koji pozivaju parent konstruktore (uglavnom reda radi, samo proslede argumente), to je po meni suludo, sem ako mi daje neku vrednost u radu zauzvrat (a uglavnom ne daje, tipa svaka "medjuklasa" koja je nasledjena samo jednom je visak, a ljudi prosto obozavaju da naprave apstrakcije koje nikada nece koristiti)...

naravno to je stvar dobrog projektovanja, da se balansira ono sto je lako programeru da napise i ono sto je lako masini da izvrsi, i svi ti problemi mogu da se izbegnu, samo ljudi (vrlo) cesto to ne uspeju jer se previse oduseve kompleksnoscu svog koda... imao sam priliku i da ja parvim tu gresku, a i da radim na tudjim velikim projektima kojima je to kamen oko vrata, a inace su ih pisali vrhunski programeri...

MaxMagnus 28. 12. 2010. 01:05

Citat:

Originalno napisao ivanhoe (Napišite 93450)
@maxmagnus: a sto ne bi spojio zadnja 2 dela? Meni to deluje kao najlogicnije... Zend\Controller\Dispatcher\ a klasu nazoves Dispatcher_Interface, pa ce ti onda posle biti class Moj_dispatcher implements Dispatcher_Interface {...} sto je prilicno jasno

trenutno resenje koja primenjujem je slicno, samo bez "_" karaktera. DispatcherInterface. razlog je komplatibilnost sa autoloader funkcijom koji ime klase "prevodi" u putanju pa se "_" ili "\" prevode u DIRECTORY_SEPARATOR

edit: zaboravih da obrazlozim zasto mi se ovo ne svidja. ne volim mesanje velikih i malih slova u imenu klase (vec se reci razdvajaju dodatnim karakterima _ ili \) iz razloga sto postoje odredjeni (vrlo korisni, ne bih sad da ulazim u detalje) scenariji kada je potrebno generisati ime klase a onda je tesko postici da je ime ispravno. ok, to verovatno nikad nece biti neka abstraktna klasa ili interface iz sasvim ociglednog razloga (ne moze se instancirati ni jedno on to dvoje) ali moram da se ogranicim u konvenciji imenovanja, da se takve stvari ne dozvoljavaju.

MaxMagnus 28. 12. 2010. 01:31

@ivanhoe:

jasno sve, razumem sta si hteo da kazes. i slazem se. pre neki dan sam negde procitao negde ovde na DPTu, da ne trazim sad tacno, bluesman je rekao da misli da ne postoji projekat na svetu koji je poceo sa projektnom dokumentacijom i na kraju ispao upravo onako kako treba, naravno neki normalno velik projekat. da, setih se sad, ona "stara" prica kako ljudi blate php da je sranje, a sama cinjenica da PHP pokrece takve velicine (a ovo je mala rec) kao sto su FB i YAHOO je dokaz sta sve taj, po njima los, PHP moze da uradi. sto rece goran, verovatno je jedini jezik kojem mozhesh da gurnesh svakakva sranja i on da to proguta i da radi sa osmehom :)

sad ce neko (@jablan ;) ) da dodje i kaze kako naravno pored PHP su tu gomile drugih stvari, npr HipHop kod FBa, i da blati malo PHP...

ono sto nisam najbolje razumeo je ovo sa slabim performansama kod poziva funkcija. zar je resenje da se smanji broj funkcija koje se pozivaju... koji je magicni broj?

hajde da pogeldamo sa druge strane: kad se pishe neka funkcija? pored gomile drugih validinih razloga, jedan od njih je i kad je potrebno neku funkcionalnost koristiti na vishe mesta (konekcija na bazu, izvrsavanje upita i slicno, osnovne stvari). e sad, da li je bolje svaki put pisati kod od nule, i time odstupiti od DRY principa sve zbog neke mikrooptimizacije, ili taj kod prebaciti u funkciju i koristiti ga svaki put kad postoji potreba... naravno, obojica znamo odgovor na ovo pitanje. e sad, ako je aplikacija velika, kompleksna, imace i vishe poziva ali mislim da je to sve opradvano, jer problemi koji kasnije mogu nastati pri losem projektovanju su mnogo gori od toga sto ce se izgubiti mikro sekund po prolazu, ako se ustedi koji koji poziv funkcije...

ivanhoe 28. 12. 2010. 01:52

sve je ok, dok god ti imas jasan razlog zasto to pises bas tako. Nema smisla zrtvovati lakocu rada zbog performansi, sem naravno tamo gde za to imas smisla :)

Magican broj je onaj neophodan minimum da bi sve radilo i moglo da se lako koristi onako kako si ti zamislio, to je pre svega stvar licnih preferensi i zahteva projekta... ako pravis aplikaciju za 10 ljudi nebitno je, ako pravis CMS koji ce da ima peakove trafika onda je bitno... uvek mozes da resis problem i povecanjem resursa, to je isto sasvim legalan pristup, ako si siguran da mozes da skaliras vertikalno koliko ti treba u buducnosti...

a problem je kad dodje sef i pita te sto ovo tako sporo radi, a ti mozes jedino da mu kazes: zato sto ti je tako napravljen sistem u pocetku...jer ti onda obicno zapadne da smisljas kako da to ipak resis...

jablan 28. 12. 2010. 10:21

Off Topic:
Citat:

Originalno napisao MaxMagnus (Napišite 93451)
...iz razloga sto postoje odredjeni (vrlo korisni, ne bih sad da ulazim u detalje) scenariji kada je potrebno generisati ime klase a onda je tesko postici da je ime ispravno...

Ovo što ti praviš već postoji i zove se Rails i radi nad jezikom kome je metaprogramiranje ko dobardan. :)

ivanhoe 28. 12. 2010. 13:48

^ postoji to i u drugim jezicima, ukljucujuci i php, vecina fw koristi tu foru odavno ...

bluesman 28. 12. 2010. 14:14

@jablan FTW :) Neuništiv si :)

McKracken 28. 12. 2010. 17:01

A ako u narednih 5 minuta pocnete da koristite Ruby/Rails, dobicete ovaj neverovatni otvarac za konzerve, POTPUNO BESPLATNO!

vidak 28. 12. 2010. 17:18

ja sam počeo! a koji to otvarač za konzerve, ne vidi se link :D

edit: i da li mora odmah da se počne sa OOP ili može i proceduralno (za početak dok se ne snađem) ?

_korso_ 28. 12. 2010. 20:17

^ Za pocetak ... u ruby-ju su sve klase i objekti :)

bluesman 28. 12. 2010. 20:54

E, hajde stvarno ... GTFO ... vidite naslov teme, ko vas pita za ruby i smalltalk :) Napravite temu "Ruby" pa se izljubite i načestitajte nove godine, nemam ništa protiv :)

nn.nn 29. 12. 2010. 00:02

^ party pooper ;)

vidak 29. 12. 2010. 00:21

Ja sam čuo da sa rubijem može ceo web da se programira? :D

jablan 29. 12. 2010. 08:37

http://www.youtube.com/watch?v=iDbyYGrswtg

Off Topic: Sorry, Ruby me malo razmazio, zaboravio sam komplikovanu ali nadasve logičnu sintaksu za embedovanje YT klipova...

bluesman 29. 12. 2010. 12:58

Hm, sada mi je sve mnogo jasnije ... dakle Ruby obožavaju ljudi kojima je ovo smešno i zabavno :) Zato je valja taj Ruby i toliko exciting :)


Vreme je GMT +2. Trenutno vreme je 10:53.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.