OOP hogyan?
2006-08-30T15:13:35+02:00
2006-08-31T08:28:50+02:00
2022-07-26T15:21:15+02:00
  • Pred: ezzel az a bajom, amit már mondtam is: kódolás szinten be kell vinnem a példádban foo osztály példányát mint $_SESSION['teszt'], ennél sztem már az is célravezetőbb, ha a raktár osztályban hozok létre egy adatbáziskezelő osztályt és azt csak ott használom. Végülis ez sem olyan nagy probléma, ha odafigyelek arra, hogy az objektumokat meg is szüntetem, ha már nincs szükség rá. Hajlok arra, hogy ezt csak így lehet, de hátha lehet másképp is:)



    Felhö:először is köszönöm a linkeket!El fogom olvasni. Másodszor bocsánatot kérek hogy komolyabb átolvasás nélkül reagálok.

    Elfogadom és helyet adok annak hogy a sql nyelvre "fordító" részt is külön kell szedni, ahhoz hogy az alkalmazás valóban független legyen az adatbázis szerver típusától. Tehát oké, legyen még egy osztály, mondjuk a neve DAO.
    Most egy kicsit menjünk vissza az első hozzászólásomhoz, onnan is a második verzióra. Van ott egy ilyen

    $eredmény=$raktar->getOsszTetel($access->getResult($raktar->requestOsszTetel()));


    Ha beleveszem a dao-t akkor ez méghosszabb lesz
    Na ezzel ez az én nagy problémám. Minél inkább szétszedem a dolgokat, annál inkább bonyolódik a kód
    Pedig (javítsatok ki ha tévednék) az oop legfőképp arra való, hogy a kód átlátható legyen és könnyedén méretezhető módosítható.(mondhatnám úgy is, értem van:), bár ha hülén csinálom akkor a saját életemet keserítem meg vele:))
    Tehát egyenlőre maradjunk annaál a két osztálynál amit írtam valahogy úgy módosítani a logikai felépítésen, hogy megmaradjanak az osztályok zártak és a kód is szépen átlátható legyen. gondolok itt arra, hogy ha kell egy adat, akkor az kb ilyen egyszerűen tehessem meg, a=$raktar->TetelFromId("id"), ezt addig nem tudom megtenni, amíg a Raktar osztály hozzá nem fér az adatbázis-kezelőhöz, tehát az a kérdésem hogy ezt hogyan tehetem meg?


    Mutasd a teljes hozzászólást!
  • Szia!


    Adatbázis kezelő réteghez egy megoldási lehetőség:
    DAO - Adatbáziskezelés picit másképp . Weblabor

    Alkalmazás alap felépítése MVC minta szerint:
    Ruby on Rails . Weblabor

    Tehát vannak olyan alap osztályok, amik az általános infrastruktúrát nyújtják. Egy kérés kiszolgálása a következő képpen zajlik nagy vonalakban:
    o jön a kérés
    o a Controller ezt a kérést leképzi egy akcióra (pl. /action/addUser.php)
    o az akció matat egy keveset, majd ennek alapján eldönti, hogy mit kell a usernek mutatni, eldönti, hogy melyik view-t kell megjeleníteni (pl. view/addUser.php).
    o a view elvégez még a megjelenítéshez esetlegesen szükséges dolgokat, majd megjeleníti a hozzárendelt templatet (pl. template/addUser.tpl), amiben a konkrét HTML, WML stb. van.

    Ehhez kb. kell egy Controller osztály, Action, View, Template alap osztályok. Akkor még lehet ilyesmi: Request, RequestValidator, ErrorHandler, Log, Factory stb., amelyek szintén a alap keretrendszer osztályok.

    A fentiek fényében az "igazi meló" az action osztályokban történik. Itt én a következő képpen szoktam eljárni, ha szabad kezem van. Vannak üzleti logika osztályok, DAO osztályok (perzisztencia réteg) és egyéb utility osztályok. Általában az akció osztályok egy üzleti logika osztályt példányosítanak, vagy pedig ha egyszerűbb dolog, akkor csak simán egy DAO-t, és az elvégzi a szükséges melót (ha az ellenőrzés sikeres volt).


    Felhő
    Mutasd a teljes hozzászólást!
  • akár. Vagy a példányt (emlékeim szerint PHP-ről beszéltél) berakod session-be, vagy akármilyen globális változóba

    pl:
    session_start(); class foo { function boo() { echo "foo"; } } $_SESSION['teszt'] = new foo; $_SESSION['teszt']->boo();

    De az is jó megoldásnak tűnik, amit mondasz.
    Mutasd a teljes hozzászólást!
  • Akkor teszteljük hogy értem e:)

    ugy gondolod hogy létrehozok a data_acces egy példányát és a ezt felhasználni kívánó osztályok deklarációjában felhasználom?

    mert én így értettem:)
    Mutasd a teljes hozzászólást!
  • ezt próbáltam kifejteni én is
    Ezek szerint nem sikerült
    Mutasd a teljes hozzászólást!
  • De akkor bele kell vinnem a raktár osztályba az előtte létrehozott data_access objektumot, elveszik az elkülönített rendszer
    Mutasd a teljes hozzászólást!
  • egy kis UP neked

    Próbáld meg végiggondolni, hogy mi mit használ..
    Nekem úgy van megoldva, hogy az elején létrejön egy globális dataAccess objektum, amit mindenki elér. Ennél csak arra kell figyelni, hogy ha nem azonnal ad visszatérési értéket és elindítasz egy másik lekérdezést is, akkor az első elveszhet (tehát előbb menjen végig a lekérdezé, utána jöhet csak új)
    Mutasd a teljes hozzászólást!
  • Sziasztok!

    Most ismerkedem az OOP-vel, logikai problémáim vannak

    példaként legyen ez egy készletnyilvántartás, példában php utasítások

    osztályok
    data_accessXXX //feladata : az adatbázis szerver kapcsolat, kapcsolatmegszakítás, kérés küldés, eredmény visszadása, az XXX az adatbázis típusa pl.: mysql,pgsql stb..., tehát minden szerver típusra egy osztály és olyat hozok létre ami kell
    keszlet //feladata : a keszlet adatbázis tábláinak karbantartása (hozzáadás, módosítás, adatok szolgáltatása)


    itt már azzal gondba vagyok hogy mi legyen a készletben:)
    két dolog van egyenlőre amit kigondoltam
    1., a keszletben hozok létre egy data_access objektumot a konstruktorban vagy bárhol. akkor mindent elér a készlet, viszont nem erőforrás pazarlás-e ez egy nagyobb rendszerben? ahány tábla (mert pl lehet még sok számla,partner stb) annyi data_acces objektum
    2., teljesen szétszedve, és pl. a keszlet osztályban olyan függvényeket csinálnék hogy
    requestOsszTetel() //visszatérési érték: egy sql szöveges kérés, ebben az esetben pl.: select * from tetel
    getOsszTetel($result) // ahol $result egy sql lekérdezés eredménye, a visszatérése pedig egy számíze szerint összetákolt táblázat

    a data_acces-ben van mondjuk egy ilyen
    getResult($query_string) //ami elküldi a szervernek a kérést és visszaadja az eredményt


    akkor programban ez kb így nézhetne ki

    $access=new data_access;
    $raktar=new keszlet;

    //csatlakozás tegyük fel itt megvan;

    $eredmény=$raktar->getOsszTetel($access->getResult($raktar->requestOsszTetel()));

    Szerintetek melyik a jobb? Jó egyáltalán valamelyik, vagy teljesen rosszul indultam neki a feladatnak?
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd