játékfejlesztés.hu
FórumGarázsprojectekCikkekSegédletekJf.hu versenyekKapcsolatokEgyebek
Legaktívabb fórumozók:
Asylum:    5462
FZoli:    4892
Kuz:    4455
gaborlabor:    4449
kicsy:    4304
TPG:    3402
monostoria:    3284
DMG:    3172
HomeGnome:    2919
Matzi:    2523

Pretender:    2498
szeki:    2440
Seeting:    2306
Geri:    2192
Orphy:    1893
Joga:    1791
Bacce:    1783
MaNiAc:    1735
ddbwo:    1654
syam:    1491
Korábbi postok
> 1 < [2] [3] [4] [5] [6] [7] [8] [9] [10]
full3nzo - Tag | 42 hsz       Online status #211853   2018.02.09 15:48 GMT+1 óra  

Ezt a hozzászólást full3nzo módosította (2018.02.11 15:48 GMT+1 óra, 134 nap)

   
Powerslave - Tag | 13 hsz       Online status #211847   2018.02.06 12:57 GMT+1 óra  
Szinkron request-response feladatokra valóban nehezen találnál jobb megoldást az AJAX-nál.

   
full3nzo - Tag | 42 hsz       Online status #211846   2018.02.06 09:45 GMT+1 óra  
Köszi a választ! Jelenleg a regisztráció és bejelentkezés valamint egy ranglista lehívása a közeli cél illetve ez már működik - realtime-os dolgokra még csak merészebb álmaimban gondoltam, de jó tudni, hogy van rá megoldás ami elérhető - ha lesz elég időm, akkor mindenképpen utánajárok.

   
Powerslave - Tag | 13 hsz       Online status #211845   2018.02.06 09:17 GMT+1 óra  
Fizetős szervernél kutya kötelességük megoldani az ilyen jellegű problémáidat; ha nem, akkor másik szolgáltatót kell választani. Emlékeim szerint ingyenes szolgáltatón is illene működnie, ahol nemhogy admin jogot, de támogatást sem nagyon kapsz - feltéve, persze, hogy a szerveroldali infrastruktúra érti a protokollt.

Problémát inkább az öregedő böngészők okozhatnak, erről itt létezik egy hasznos táblázat: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API

Ugyanakkor jól át kell gondolni, milyen konkrét funkcionalitást akarsz elérni, és adott esetben megfontolni a webes technológiák kihagyását a buliból.
(Már csak azért is, mert az általad kiszemelt PHP-t alapvetően nem éppen arra találták ki, hogy folyamatosan futva állandó kommunikációt folytasson akár több klienssel is)

Ha az AJAX megfelel a célodnak anélkül, hogy X időközönként meg kelljen kérdezni a szervertől, hogy "Ott vagyunk már?", akkor jelen helyzetben tökéletes.

OFF: Marhára élvezem, hogy nem működik az oldal Chrome-mal, és csak a kommentelés miatt folyton másik böngészőt kell indítanom...

   
full3nzo - Tag | 42 hsz       Online status #211844   2018.02.06 05:35 GMT+1 óra  
Instalok segítsége az én problémámra azonnali megoldást adott és mivel elég kezdő vagyok a WEB-es dolgokban létfontosságúnak éreztem. Nincs még akkora tapasztalatom a WEB-et célzó technikákban, hogy átfogóbban lássam a dolgokat.

Ha már szóba került a websocket annyit kérdeznék vele kapcsolatban, hogy megoldható vele a kiszolgálás olyan gépről is mint pl. egy fizetős web-szerver szolgáltatásnál ahol nem rendelkezem rendszergazdai jogokkal? C++ ban használtam winsocket-et, de ott saját tulajdonú "szerver" gépem volt és fix IP-m - ott egyszerűen ment minden és ugye a WEB-es dolgokhoz nem sok köze volt.

   
Instalok - Tag | 561 hsz       Online status #211843   2018.02.05 17:57 GMT+1 óra  
@Powerslave
Nem gondoltam tovább a dolgokat, csak írtam lehetőséget.

   
Powerslave - Tag | 13 hsz       Online status #211842   2018.02.05 17:21 GMT+1 óra  
Idézet
Instalok :
Két külön dologról van szó. Ha jól tudom, akkor a JS kliens oldali, míg a php szerver oldali.

No és a NodeJS?

Idézet
Instalok :
Fordítva valószínűleg több esélyed van; php kódból hívni js-t.

Amit még megtehetsz az egy AJAX hívás, talán ez lehet a legjobb megoldás. https://stackoverflow.com/questions/7165395/call-php-function-from-javascript



Még mindig websocket Persze attól függ, hogy mire. Aszinkron feldolgozáshoz, folyamatos kommunikációhoz például jobb ötlet, mint az AJAX polling/long-polling. Persze egy web nélküli kliens-szerver architektúra, esetleg P2P mégjobb.
Ha csak bele kell rúgni a szerverbe, hogy tudomást szerezzen valamiről, esetleg azonnal válaszoljon, akkor az AJAX (REST! Nem csak úgy odahányva!) célszerűbb.

Ezt a hozzászólást Powerslave módosította (2018.02.05 17:40 GMT+1 óra, 139 nap)

   
full3nzo - Tag | 42 hsz       Online status #211840   2018.02.05 12:49 GMT+1 óra  
@Instalok: a jQueryvel szívtam egy darabig, mert lemaradt, de így működik és elég pofás: thx again!

$.post('regorlog.php',{postusername:username, postpassword:password, postemail:email},
function(data) {
$('#result'.html(data);
});

Ezt a hozzászólást full3nzo módosította (2018.02.05 16:55 GMT+1 óra, 140 nap)

   
full3nzo - Tag | 42 hsz       Online status #211839   2018.02.05 10:12 GMT+1 óra  
omg! igen pont ez kellett köszönöm! ... persze spongyán fogalmaztam a php kódok a szerveren vannak és várják a hívást - az alapvető gondom az volt amit igazából ténylegesen írni akartam, hogy nem tudtam sehogy a JS gameLoop-ból "kihivatkozni" a HTML-be, de így teljesen megvilágosodtam - jelenleg tanulom a JS, HTML5, PHP -> MySQL "nyelveket" és van zűrzavar - remélem pár hét múlva jobban leszek ...

Köszönöm!

   
Instalok - Tag | 561 hsz       Online status #211838   2018.02.05 09:58 GMT+1 óra  
Két külön dologról van szó. Ha jól tudom, akkor a JS kliens oldali, míg a php szerver oldali. Fordítva valószínűleg több esélyed van; php kódból hívni js-t.

Amit még megtehetsz az egy AJAX hívás, talán ez lehet a legjobb megoldás. https://stackoverflow.com/questions/7165395/call-php-function-from-javascript

   
full3nzo - Tag | 42 hsz       Online status #211837   2018.02.05 09:03 GMT+1 óra  
Lenne még egy kérdésem (valószínüleg nem az utolsó ): HTML-ből hívok egy "xxx.js" fájlt, amiben fut egy játék, hogy lehet megoldani, hogy php kódot is tudjak végrehajtani közben? Itt konkrétan egy adatbázis elérésre lenne szükségem, majd újból futna a játék.

Nem találtam a php beágyazásról semmi anyagot, de lehet hogy nem is létezik, akkor mi lehet a megoldás rá?

   
full3nzo - Tag | 42 hsz       Online status #211836   2018.02.04 21:15 GMT+1 óra  
Láttam mind a két részét és sok másikat - kicsit elavult a felületük a jelenlegihez képest, de a baj az, hogy nem regisztrálja a webes felületet - vagy az is lehet, hogy eleve rosszul fogok neki - köszönöm, hogy megosztottad!

   
Instalok - Tag | 561 hsz       Online status #211835   2018.02.04 16:26 GMT+1 óra  
Nem néztem végig, csak beletekertem, lehet, hogy ez az, amit keresel. Néhány másodperc után bukkantam rá.

   
full3nzo - Tag | 42 hsz       Online status #211834   2018.02.04 14:29 GMT+1 óra  
Egy bongeszoben futo jatekot szeretnek ugy futtatni, hogy he kozvetlenul a sajat url-en erje el hanem a Facebook on keresztul mint egy ottani jatekot.

   
zeller - Törzstag | 478 hsz       Online status #211833   2018.02.04 09:48 GMT+1 óra  
ez mit jelent pontosan?

   
full3nzo - Tag | 42 hsz       Online status #211832   2018.02.03 18:46 GMT+1 óra  
Sziasztok!

Facebook-on keresztül szeretném a saját weboldalam futtatni - lehetséges ez szerintetek és ha igen, akkor hogyan?

   
full3nzo - Tag | 42 hsz       Online status #211825   2018.01.23 15:35 GMT+1 óra  
Igen beszédes

   
zeller - Törzstag | 478 hsz       Online status #211824   2018.01.23 12:31 GMT+1 óra  
Csak egy utolso megjegyzesem lenne
https://images-cdn.9gag.com/photo/a05Yxqz_700b.jpg

   
full3nzo - Tag | 42 hsz       Online status #211823   2018.01.23 11:40 GMT+1 óra  
Köszönöm az útmutatásokat!

   
Powerslave - Tag | 13 hsz       Online status #211822   2018.01.22 20:38 GMT+1 óra  
Khmmmwebsocket

   
Matzi - Szerkesztő | 2523 hsz       Online status #211821   2018.01.22 19:42 GMT+1 óra  
Ha a korok viszonylag ritkábbak, mondjuk 5-10 perc és felfele, akkor az adatbázis simán jó megoldás lehet. Lásd régen az ilyen teruletfoglalgató játékok, mint a... nem jut eszembe a nevuk.
Ha gyakoribbak, mondjuk majdnem realtime, akkor már játékmenetnek kell, hogy folyamatosan a memóriában legyen, és mondjuk tuti nem phpban írnám.

A kérdésedre visszatérve a szolgáltatóknál szoktak lenni limitek, pl mennyi adatforgaslmat bonyolíthatsz, meg ilyenek. Elvileg amíg azokat nem léped túl, addig nincs gond. Persze ha a játékod sikeres, akkor bármikor lehet nagyobb csomagra váltani, és ha erre szukség van, akkor remélhetoleg a bevétel is elbírja. Végsosoron akár egész szerverfarmokat is lehet bérelni.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
Instalok - Tag | 561 hsz       Online status #211820   2018.01.22 17:17 GMT+1 óra  
Személyes véleményem szerint az adatbázisokat inkább adattárolásra érdemes használni, mintsem kommunikációs csatornaként. A legjobb megoldás az lenne, ha saját szerver-oldali alkalmazást telepíthetnél, és simán csak a memóriában tárolnád a meccsek adatait.

Gondolok itt arra, hogy teljesen fölösleges lenne beírni adatbázisba azt, hogy az x játékos mit lépett, hogy aztán azt az y játékos onnan olvassa ki.

Online játéknál (meg úgy egyébként is) nagyon népszerű a szerver-kliens architektúra, ahol a kliens mint I/O van csak jelen. Tehát kattint a user, az elküldi az action-t a szervernek, az validálja, hogy egy valóban érvényes lépés legyen. Ezek után végrehajtja az akciót, az eredményről pedig tájékoztatja a kliens(eke)t. Ehhez pedig nincs szükség arra, hogy adatbázisban legyen letárolva, elég, ha a memóriában van.

   
full3nzo - Tag | 42 hsz       Online status #211819   2018.01.22 14:20 GMT+1 óra  
Koszonom a valaszt! Egy kerdesem lenne meg: szerintetek egy adatbazison keresztul megoldhato egy korokre osztott jatek informacio csereje? ITT nem a technikai megoldasra vagyok kivancsi, hanem arra, hogy eleg intenziv forgalom lenne mogotte es semmi elkepzelesem sincs, hogy egy web-szerver szolgaltato mennyire toleralna. Bonyolitott, mar valaki Nagy adatforgalmat kozuletek tartosan? Vannak buktatoi? Koszi elöre is.

   
Instalok - Tag | 561 hsz       Online status #211818   2018.01.22 09:40 GMT+1 óra  
Általában nem a nyelvet kell megismerni, főleg nem ezeknél az egyszerűbb nyelveknél. Sokkal fontosabb az alkalmazható technológiák és kódolási "szokások" ismerete. Ezért is írtam, hogy érdemes egy adott framework-öt megnézni, hogy az hogyan csinálja, hogyan van felépítve, tetszik-e annak a használata, stb.

Ezek után vagy elkezded használni azt a framework-öt, vagy az adott problémának utánajársz, hogy hogyan lehet megoldani. Például adatbáziskezelést is meg lehet közelíteni több irányból is, lehet használni ORM-et például. Azoknak is van több fajtája (leginkább megvalósításban és használatban térnek el - mert hát mi másban? )

   
full3nzo - Tag | 42 hsz       Online status #211817   2018.01.22 07:56 GMT+1 óra  
Nem árt, ha az ember szélesebb ismeretekkel rendelkezik, mert úgy jobban átlátja a dolgokat - ezen a ponton vannak hiányosságaim. Már 3 éve Android játékok fejlesztésével foglalkozom és Java alapokon nyugszik minden - jelenleg már van egy működőképes eszköz-webszerver kommunikációm, ami egy új szintet jelent a fejlesztésben és ehhez szeretnék egy átfogóbb tudást. Ennek kapcsán csak az adatbáziskezelés releváns jelenleg - ezért is írtam, hogy a php-t gondolom a legjobbnak.

Az a baj ezzel a célirányos tanulással, hogy töredékét ismeri meg az ember egy adott nyelvnek.

   
Instalok - Tag | 561 hsz       Online status #211816   2018.01.21 16:20 GMT+1 óra  
Könyvet nem nagyon tudok, érdemesebb adott problémákra megoldást keresni. Illetve ami még segíthet a szemlélet kialakításában, az az, ha létező (és népszerű) frameworköket nézel.

@zeller arra gondolhatott, hogy a php-nál már vannak modernebb dolgok is (pl. Ruby). Sőt, backendet sokszor valamilyen objektumorientált highlevel nyelven írnak (c#, java nagyon népszerű).

Abban viszont igazad van, hogy a php a maga bugyutasága mellett a mai napig elég népszerű. Sőt, ha például Wordpress-szel akarsz foglalkozni, ott bizony php-t kell túrni.

   
full3nzo - Tag | 42 hsz       Online status #211814   2018.01.21 12:18 GMT+1 óra  
Mert szvsz a legjobb páros. Persze úgy is fogalmazhatok, hogy jobbal meg nem talalkoztam. Apache + php + MySQL... Azert erdekel minden ötlet...

Van egy jo konyvem, de a peldakat erosen mellozi, that megse jo...

Ezt a hozzászólást full3nzo módosította (2018.01.21 15:08 GMT+1 óra, 155 nap)

   
zeller - Törzstag | 478 hsz       Online status #211813   2018.01.21 10:47 GMT+1 óra  
MIert PHP?????
(Amugy en nem tudok)

   
full3nzo - Tag | 42 hsz       Online status #211812   2018.01.21 09:18 GMT+1 óra  
Sziasztok!

Nemregen kezdtem a php/mysql tanulasat - tud valaki esetleg egy jo konyvet ajanlani ahol kifejezetten gyakorlati peldakat taglalnak? Ne baj ha szaraz es tomor.

Elore is koszonom.

   
Instalok - Tag | 561 hsz       Online status #211658   2017.11.09 14:37 GMT+1 óra  
CSRF ellen vajon elegendő az a védelem, hogy a request headerbe belerakjuk a bejelentkezéskor kapott tokent?

Kód:
C: A felhasználó bejelentkezik username+password segítségével.
S: Validáljuk az inputot, megnézzük, hogy van-e ilyen felhasználó. Ha van, akkor generálunk egy tokent, és eltároljuk a hashelt változatát az adatbázisban (hashed_token, user_id)
C: Visszakaptunk egy tokent, eltároljuk a session-ben.
C: Bármilyen request esetén a headerbe beletesszük ezt a tokent (amit a session-ben tároltunk)
S: Megnézi, hogy létezik-e a headerben az az érték. Ha nem, akkor azonnal BAD_REQUEST, ha létezik, akkor pedig ellenőrzi. Ha átment a csekken, akkor megkeresi az adatbázisban a hozzá tartozó user_id-t, majd elvégzi a kívánt műveletet
C: Visszakapunk egy response-t


Ez szerintem csak akkor nem működik, ha a támadó kitalálja a megfelelő headert.

   
Instalok - Tag | 561 hsz       Online status #210369   2016.10.04 21:32 GMT+1 óra  
A lentebbit végül megoldottam, maradt a REQUEST_URI

Viszont kíváncsi lettem, hogy nem vettem-e észre valami függvényt, amit használok, és nagyobb verziót igényel, mint php 5.5.0, így keresgéltem a neten, találtam például ezt. Tök jó lenne, csak 2010 óta nem volt frissítve, így az 5.3 a legnagyobb verzió, amit ismer.

Van valakinek ilyesmi cucca, amivel le tudnám csekkolni az eddigieket, hogy minimum hányas verzió kell milyen extension-ökkel?

   
Instalok - Tag | 561 hsz       Online status #210360   2016.10.03 08:25 GMT+1 óra  
Aludtam rá egyet, az előzőhöz képest fél megoldás lehet az, ha nem két külön szabályom van, hanem csak simán mindent átíratok, kivéve ugye a directory és file eléréseket.
Kód:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?url=$1 [END]

Ezzel így már csak annyi gond maradt, hogy ha beírom, hogy
Kód:
test:8080/index.php?url=hello

akkor a $_GET['url'] a "hello"-t adja vissza.

Régen annyi volt a megoldásom az egészre, hogy $_GET helyett fogtam, és lekértem az url-t $_SERVER['REQUEST_URI'] segítségével, és manuálisan feldolgoztam. Így, ha valaki beírta az index.php-t utána, akkor a rewrite rule ugyan nem irányított tovább, de az url alapján nem talált valid megjeleníthető oldalt.

Azonban azt hallottam, hogy erre a változóra nem érdemes építeni. A szerver eleve vagy elküldi ezt az értéket, vagy nem, ráadásul kliens oldalon ez felülírható - ha minden igaz.
Idézet
The entries in this array are created by the web server. There is no guarantee that every web server will provide any of these; servers may omit some, or provide others not listed here.

Idézet
'REQUEST_URI'
The URI which was given in order to access this page; for instance, '/index.html'.

   
Instalok - Tag | 561 hsz       Online status #210359   2016.10.02 23:23 GMT+1 óra  
Köszi, ez a VS Code tényleg bejött, és ez is ingyenes.

Haladtam már picit előre, most konkrétan ott tartok, hogy ilyen tök egyszerű url rewrite szabályokat írtam a htaccess-be, azonban nem értem, hogy miért matchel egy adott patternre.

Maga a htaccess file csupán ennyi:
Kód:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !=/favicon.ico
# valid url, eg. forum/view-forum/12 => index.php?url=forum/view-forum/12
RewriteRule ^([a-zA-Z0-9\-_\/]*)$ index.php?url=$1 [END]
# invalid character in the url (eg. ".") => index.php?url=404
RewriteRule ^(.*)$ index.php?url=404 [QSA,END]

Azaz, ha egy általam elvárt formájú url érkezik (tehát nincs benne pont meg semmi egyéb speciális karakter), akkor azt átírom az index.php?url=$1-re, majd megszakítom a futást (az END ennyiben másabb, mint az L).

Ellenkező esetben, ha invalid karakter érkezik (pontosabban, ha nem matchel az első), akkor azt rögtön az index.php?url=404-re irányítom, amit aztán külön ellenőrzök, hogy ilyen url érkezett-e.

Elkezdtem azonban tesztelgetni a dolgokat, alapvetően működik. Azonban meglepődve tapasztaltam, hogy az url végén lévő "pont" karaktert tulajdonképpen figyelmen kívül hagyja, illetve az "üres" url nem jól működik.
Kód:
$url = isset($_GET['url']) ? $_GET['url'] : "index";
echo "<pre>";
echo $url;
echo "</pre>";

Eredmények:
test:8080 => url = 404 (nem jó, üres url-t várok, amiből a kódban index-et csinálok)
test:8080/asd => url = asd (jó, valid string az 1. rule-nak)
test:8080/asd..... => url = asd (nem jó, hol vannak a pontok?)
test:8080/forum...../view-forum/12 => url = forum/view-forum/12 (nem jó, az előző eset...)
test:8080/asd,,, => url = 404 (jó, mert a vessző invalid karakter)
test:8080/asd.php => url = 404 (jó, a szöveg.szöveg egy invalid pattern)

Szóval a kérdés már csak annyi, hogy az üres url az miért nem áll meg az első pattern match-nél, illetve, hogy a pont karaktereket (anélkül, hogy valami más követné) miért fogadja el az első match?

   
S_gaming - Tag | 12 hsz       Online status #210358   2016.10.02 11:59 GMT+1 óra  
A suliban webprog tantárgynál ismertem meg a Komodo Edit/ Komodo IDE-t, nemcsak a PHP-t, hanem html-t, js-t is kiemeli és ingyenes.

   
Instalok - Tag | 561 hsz       Online status #210357   2016.10.02 11:37 GMT+1 óra  
Köszi, ez a Visual Studio Code tetszik, Crane pluginnal kifejezetten jó lett!

   
HadaHector - Tag | 71 hsz       Online status #210356   2016.10.01 22:22 GMT+1 óra  
Aptana studio vagy Visual Studio Code amiket ajánlanék, hogy melyik jön be jobban, majd úgyis eldöntöd. De mindkettő elég jó.

   
Instalok - Tag | 561 hsz       Online status #210355   2016.10.01 14:38 GMT+1 óra  
Más: szerkesztőt mit használtok php-hoz? Eddig notepad++ban nyomtam, de hátha van valakinek jó tapasztalata egy másikról (amiben lehetőleg van "intellisense", mert akkor a notepad++ is jó)

   
Instalok - Tag | 561 hsz       Online status #210344   2016.09.27 13:09 GMT+1 óra  
Néha ide fogok tévedni ilyen gyogyós kérdésekkel, bocsi

A kis könyvecskémben most annál a résznél járok, ahol a cachinget tárgyalja. Konkrétan egy Memcache nevű dolgot használ, amivel elvileg lehet hatékonyan tárolni változókat key=>value módon. Úgy láttam, hogy localhostra nyit kapcsolatot, de sejtésem sincs, hogy miképp működhet, lehet utánanézek majd.

Eleve nem szeretem a 3rd party dolgokat (engine fejlesztés közben is csak egy SOIL nevű libet húztam be, amivel tudok képeket betölteni ), de a Memcache-nek szűksége van a ZLib-re is, így egyre kevésbé tetszett.

Azonban úgy gondolom, hogy valamilyen cache dolog nekem kelleni fog (azon kívül, hogy, ha úgy van, akkor az egész html oldalt cache-elem, azt kb. 10 sorból meg lehet csinálni), így valami mégis kelleni fog. A kérdés az, hogy van-e más, ingyenes, jó, egyéb dependency nélkül, avagy nagyon bonyolult lehet-e írni egyet? Mivel főleg tanulási céllal csinálom a dolgomat, így azt se bánnám, ha írnék egyet.

   
Instalok - Tag | 561 hsz       Online status #210317   2016.09.19 17:27 GMT+1 óra  
@Matzi:
Nekem sem volt túl szimpatikus egyébként, ezért is kérdeztem, hogy mennyire szokás az ilyeneket elő projekteken használni. Inkább megírom mindig kézzel a getter/setter függvényeket, mint mondjuk c++/c#/java esetében is kell (nyilván generálható is, de na).

Mondjuk a típus ellenőrzésre tényleg jó lehet, úgy nem kellene mindig kézzel megtenni. Egyébként felhozott egy olyan példát is, ahol kontextusfüggetlenné tehetjük ezzel a módszerrel.
Idézet
If the $location and $smell properties are only ever used in the same context, then our classes need none of this configuration we’ve been speaking about. If, on the other hand, these properties can have different meaning based on the implementation, we would need a means of defining this alternative context. Say, for instance, we wanted to create a Doghouse subclass in which $location could be defined as the location inside the Doghouse in which the Dog sleeps; or say we wanted to define $smell as a percentage of scents the Dog can smell from inside the Doghouse.


@HedaHector:
Igen, típustalan nyelvnél tényleg segíthet az ilyesmi. Bár php-val simán tökön tudja lőni magát az ember, ha akarja.

szerk.:
Később hozott még 2 példát:
Idézet
Perhaps we could want to enforce read-only/write-only/read-write behavior on class properties. The $_view property is protected, so it is not accessible outside the class, but imagine we have getters/setters for our class’s protected properties. We could, in those getters/setters, read the Doc Comments of our protected properties and enforce behavior based on them.
Perhaps we could want to make sure a method is executed only once. Other methods in our class could read the Doc Comments and ensure they do not call the authenticate() method if it has already been called.
These are two small, but effective examples of situations that we would require metadata for, and could provide it using Doc Comments. We will need to write a class that allows us to inspect these Doc Comments, and return the relevant key/value pairs for us to use elsewhere.

   
HadaHector - Tag | 71 hsz       Online status #210315   2016.09.19 17:16 GMT+1 óra  
Aminek az ilyen nyelvekben van még létjogosultsága az a hungarian annotation. Tudjátok: $iNumber, $qQuery, $sTitle. Tudom sokan nem szeretik, meg csúnya, de segít.

   
Matzi - Szerkesztő | 2523 hsz       Online status #210312   2016.09.19 15:13 GMT+1 óra  
Oszintén szólva a commentekbe rakott típus információktól nekem felfordul a gyomrom. Sajnos viszont a nem típusos scriptnyelveknél ez legalább ad valamiféle teszztelhetoséget. Szóval a mágia bban rejlik hogy maga a framework tud neked hibát jelenteni, ha a commentben lévo típus nem egyezik meg a ténylegessel. Illetve ebben a getter/setter esetben meg az adott member változó létét tudod jelezni, pl perzisztenciához. Persze a konkrét frameworkot nem ismerem (mert php-hoz nem akarok nyúlni), de gyanítom valami ilyesmi lesz inkább a lényeg.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
Instalok - Tag | 561 hsz       Online status #210311   2016.09.19 14:55 GMT+1 óra  
Elkezdtem végre tanulmányozni egy php-s könyvet, de kifejezetten olyat kerestem, amiben gyakorlati példák, illetve design patternek vannak. Ez Chris Pitt-től a Pro PHP MVC könyv. Itt elkezdett mindenféle "medzsiket" használni, mint például egy inspector osztály, ami a kommentekből szed ki meta adatot, és azt használja fel automatikus getter/setter hívásokhoz, például:
Kód:
class Car extends Framework\Base
{
/**
* @readwrite
*/
protected $_color;

Értek mindent, hogy hogyan működik, meg hogy miért csinálta, de tényleg kellenek ezek? Én például jó öreg c++osként szívesebben megírom kézzel a getter/setter függvényeket, amikor az nekem kell, nem pedig kommentből kibányászni meta adatot, amit felhasználnék a __call függvényben.

   
Parallax - Tag | 595 hsz       Online status #209501   2016.04.22 17:50 GMT+1 óra  
Instalok:
A Data rétegben entitások vannak, amik a nyelv számára objektumokat reprezentálnak, az viszont, hogy a háttérben XML, vagy SQL adatokkal dolgozik a rendszer az az ORM-től függ. Van olyan ORM, ahol csak egy kapcsoló kérdése a dolog és az entitások máris XML-el dolgoznak, vagy akár a memóriában (Mockolás). Igazából ez már nem a réteg feladata, így ezzel tervezni se kell.

A ViewModel-ek bármit reprezentálhatnak nem csak egy elemet, vagy listát, hanem lehet akár egy fa szerkezet is stb. Én szét szoktam választani ezeket is, mert így könnyebb összekötni őket a View-el és nagy programnál nem mosódnak össze a funkciók.

   
Instalok - Tag | 561 hsz       Online status #209500   2016.04.22 12:19 GMT+1 óra  
@Matzi:
Köszi, próbálkozok majd

@Parallax:
Hm, így már kezdem jobban érteni.

Viszont nem lehetne például a UserModel és a UserListModel egy osztály? Azaz a user data kezelésére egyetlen osztály lenne, amin keresztül le lehet kérdezni, hogy van-e ilyen user, illetve egy függvény visszaadna mondjuk egy listát (vagy visitor pattern használata, és mondjuk paraméterként átadni a visitor objektumot) a feltételek alapján létező userekről, stb.

Továbbá azt mondtad, hogy a Data réteg az, ahol az SQL utasítások generálódnak. Mi van akkor, ha én mondjuk menet közben kitalálom, hogy mostantól nem adatbázisba, hanem XML-be szeretnék menteni? Vagy mondjuk vegyesen - egyik data így, másik úgy. Ha jól értettem abból, amit írtál, akkor az adott entity osztály (pl. UserData) generálja az SQL utasításokat a megfelelő függvényhívás hatására.

Lehet, hogy majd valami vegyes, se-ilyen-se-olyan patternt fogok használni.

   
Parallax - Tag | 595 hsz       Online status #209497   2016.04.22 08:49 GMT+1 óra  
Instalok:
Legyen a User, Topic, Post SQL táblák.

Data: Ezt .NET-es szemmel nézve entitásokká alakítja az EF (entity framework) Ezek már C# osztályok, amik nyers SQL utasításokat fordítanak a rajtuk végzett műveletek mődosító/lekérdező (LINQ) alapján. (Ez talán a Java Hibernate-vel analóg ORM)

Model: Itt lenne UserModel, UserListModel, TopicModel, TopicListModel stb. A UserModel tartalmazna egy static User CurrentUser-t, aki a belépett emberke. Ezenfelül lenne benne egy bool IsLogin fgv, ami visszaadja az adatok alapján, hogy van e ilyen nevű/jelszavú ember. A UserList tartalmaz egy lista property-t, ami egy speciális Observer minta alapján a változásokat is lekezeli. Ilyen sztem Java-ban nincs, de vhogy biztos megoldható. Az üres konstruktora Mock adatokat tartalmaz Unit teszthez, a paramétert váró konstruktor pedig egy szűrő objektumot vár, ami alapján felépíti a listát és kivülről elérhető, illetve a szűrő ráköthető automatikusan majd a View-re két irányú data binding-al. Ez igazából WPF-ben egyszerű. A többi részt ebből már sztem el lehet képzelni, üzleti logika részt kell realizálni és elfeddni a részleteket az ORM felől, tisztán 1-2 fgv és property segítségével.

ViewModel: Ez már egy buta réteg itt lenne minden egyes megjeleníteni kívánt "tevékenység", ami 1-1 class lenne. pl.: Ha a usereket akarjuk végignézni, akkor UsersViewModel, belépéshez LoginViewModel, az adminnak UserManagerViewModel stb. A login csak a UserModel-t használná, míg a manager már a UserListModel-t is, mivel lenne benne egy master-detail rész is. Ezenkívül tetszőleges, hogy mennyi model-t kell itt haasználni, feladattól függ. Na most, ha valami kellően nagy pl több millió soros vállalati szoftver, akkor ott aztán 1 osztályba beleírni mindent elég bruteforce módszer lenne. Egy egyetemi beadandónál, vagy Pistike weblapnál elmegy az, hogy egyben mindent, de amúgy átláthatatlan. Unit teszteket, neadj isten TDD-t írni ezekre az meg már főleg önkínzás, már csak azért is, mert csapatban verzió követővel dolgoznak és módosítgatnak 1 file-t egyszerre 20-an.

View pedig amennyi felhasználói felület kell, ez akár több 100 is lehet.

   
Matzi - Szerkesztő | 2523 hsz       Online status #209495   2016.04.21 19:07 GMT+1 óra  
Nem tudom php-ban hogy van, de railsben vannak layoutok (abból egyet használsz, az az oldal kerete, az egész portálnak elég egy is akár), illetve a view objektum (meg generikus html fragmentek). Ez utóbbiból épul fel az oldal, és persze rekurzívan linkelhetik be a toredékeket. Szóval egy egyszeru listázó oldal esetén a kontroller behív pár model példányt, és kikuldi a view-nak. Az meg osszerakja, magát a tobbi ilyen kis toredékbol, vagy ahogy akarja. Nyilván ott már nem célszeru a modellt változtatni, illetve a controller azt kuld le, amit akar, lehetoleg mindent, ami a megjelenítéshez kell. Pl ebben a példában a '@books' egy lista, amiben 'book' példányok vannak.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
Instalok - Tag | 561 hsz       Online status #209494   2016.04.21 18:19 GMT+1 óra  
Igazából csak "gyakorlásnak" terveztem ezt az egészet. Miután az egyetemen néztük azt a fajta MVC patternt, kíváncsi voltam, hogy vajon real-life hogyan használják ezt az egészet.

És konkrétan php esetében hogy érdemes a view részt megvalósítani? Például írok egy olyan view php kódot, ami egyetlen hozzászólás megjelenítéséért felelős? Eredetileg úgy terveztem, hogy 1 view php készül minden egyes "aloldalhoz". Azaz például egy topic megjelenítése egy view feladata, a főoldal megjelenítése egy másiké, stb. Továbbá ki adja meg a megfeleltetést, hogy melyik view kell éppen? A view nyilván megkaphatja a controller objektumot, azzal nincs gond, az alapján tud html kódot generálni.

   
Matzi - Szerkesztő | 2523 hsz       Online status #209493   2016.04.21 17:52 GMT+1 óra  
Railsben így van ahogy írom. Modelbol annyit használsz fel, amennyit akarsz. A controller viszont lekérdezesenként csak egy kell, a view meg annyi ahány darabka adatot rajzolsz ki. Úgy van, hogy lehetoleg minden uzleti logika a modellben legyen, a controller meg csak azt etesse. Smart Model Dumb Controller, vagy ugyanez Fat és Slim kombinációval. Meg persze ugyanez van visszafelé is.

A lényeg, hogy minel kevesebbszer kelljen mindent megírni. Mivel a view az csak egy darabka html, oda értelemszeruen nem raksz semmit. A controller a lekérdezéshez kotodik, szóval oda is csak annyit kell, amennyi a minimum. A modell meg lehet okos, az jó, és ha egy adatot manipulálsz, akkor azt úgyis mindig a model osztályodon keresztul teszed.

Nyilván, ha más a kiosztásod, akkor más is lehet. Frameworkonként eltéro, hogy hogyan valósítják meg. Mire kell ez neked?
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
Instalok - Tag | 561 hsz       Online status #209491   2016.04.21 17:35 GMT+1 óra  
@Matzi:
Igen, az egyetemen mi is ezt a módszert tanultuk. A model részben voltak az entity-k (Java estében Java Beans osztályok), amik egyszerű osztályok, mint egy adatbázis-tábla. A modelhez tartozott még a DAO ami a model objektumok tárolásáért és olvasásáért felelt (azaz mondjuk kiírta adatbázisba, vagy beolvasta onnan). A csúnyaság az egyetemi projektben az volt, hogy egyetlen DAO class volt, azon keresztül ment az összes model kezelése. A view tényleg csak megjelenítésért felelt, de a controllert használta fel az adatok kiírására és beolvasására (azaz a controller egyfajta mid-layer volt). A controller pedig a DAO-t használta. Ezek szerint ez a klasszikus?

@Parallax:
Tetszik ez is, egy mutáns MVC-nek tűnik.

Tehát ha tekintünk egy egyszerű fórumot, mint példát, akkor nagyon lebutítva: van 3 tábla: User, Topic, Post. A User nyilván a felhasználói adatokat tartalmazza (id, username, pwd, stb.). A Topicnak is van azonosítója, neve, esetleg leírás, ilyesmi. A Post-nak szintén id, továbbá egy Topic id (hogy az adott topic hozzászólásait tudjuk csak megjeleníteni) illetve egyéb adatok mellett egy user id, hogy tudjuk, hogy ki írta.

Ekkor miből hány osztályt kell/érdemes csinálni?
- Nyilván van 3 a Data/Model, ami az adott tábla megfelelője (User, Topic, Post).
- Ezután jön a Model/DAO, amiből szintén 3 van, a 3 előbbi classhoz tartozó. Ezeken keresztül lehet adatbázisba/akármibe írni-olvasni.

Az "eredeti" MVC szerint már csak Controller réteg maradt, amiből sejtéseim szerint szintén 3 kellene: UserController, TopicController, PostController? A legtöbb neten elérhető leírásban viszont azt láttam, hogy az URL alapján valamilyen módon kikövetkeztetik, hogy milyen Model, Controller és View objektumot kell létrehozni. És ezt meg is teszik (mondjuk az index.php-ban), azaz van 1db Model, 1db Controller, 1db View. Ez így nekem viszont nem jó, mert például egy adott Topic megjelenítéséhez szükség van a Topicok lekérdezésére, továbbá kell a Userek és Postok lekérdezése is. Azaz máris bukik az, hogy egyetlen model van, mert például az előbbi példában kell a User, Topic és Post DAO is.

Ezek szerint ez nem baj? A legtöbb internetes portálon rossz megközelítést írnak le?

Lehet, hogy kicsit kesze-kuszára sikerült, és bocsi a hosszú postért, itt egy krumpli:

   
Matzi - Szerkesztő | 2523 hsz       Online status #209488   2016.04.21 09:23 GMT+1 óra  
A ruby-on-rails is MVC-t használ. Ott úgy van a felosztás, hogy a Model az maga az adat, ami betoltodik, és alapveto muveletek rajta, vagyis minden olyasmi, amihez nem kell más, nem osszekapcsolt adatokat módosítani. A View az a HTML toredékek illetve layoutok, elég buták. A Controller meg tartalmaz minden mást, így mindkét irányba azon keresztul megy minden. Ez ugye a klasszikus megkozelítés.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
Korábbi postok
> 1 < [2] [3] [4] [5] [6] [7] [8] [9] [10]