Hirdetés

Új hozzászólás Aktív témák

  • Karma
    félisten

    Sziasztok.

    Programtervezési mintához kérnék segítéget, sajnos nincs olyan akitől ezt még megtanulhatnám. Persze ott vannak a könyvek, de mégis úgy érzem, ehhez tapasztalat kellene. Én elsősorban az abstract factoryra gondoltam. (Create design pattern-ben gondolkodom). Webalkalmazás lesz az alkalmazás, adatbázissal MVC-t felhasználva (grails - java).
    Van egy felület, ahol úgymond egy szakkört lehet létrehozni. És ezeket a szakköröket egy kollekcióba mentem bele (MongoDB, kollekció az SQL-ből ismert Tábla fogalmával egyezik meg). Ezeknek a szakköröknek van alapadata. Illetve lennének plusz adatok is. Ezek a plusz adatok attól függnek, hogy milyen tanulmányról van szó. És emiatt vetettem el a szimpla Factory method design patternt.

    Például ilyen szakkörök lehetnek:
    - Nyelv (Angol, német)
    - Reál középiskolai( Fizika, kémia, ahol lehetőség van kísérletezésre, pl plusz mező, hogy mik lesznek a kísérletek )
    - Humán középiskola (Magyar, töri)
    - Testnevelés (a többi tantárggyal ellentétben ide kell hozni valami felszerelést is például cipő, labda)
    - Informatika egyetemi (ahova kell számítógép, programozási nyelv megadása, fejleszteőeszköz stb.)
    - Bölcsészet egyetemi és így tovább.
    Igazszág szerint azt sem tudom nagyon, hogy az MVC -ben hova kéne tenni, de én a Modell-re szavaznék (és nem a Controllerre elsősorban).

    És én valahogy így képzeltem el (Felhasználva ezt: linkparticipants részt) :
    AbstractFactory: Szakkör (ez a tábla vagy kollekció)
    ConcreteFactory: IdegeNyelv, KözépiskolaReál, KözépiskolaiHumán, KözépiskolaTestnevelés, EgyetemInformatik, EgyetemMűszaki, EgyetemBölcsészet stb.
    AbstractProduct: Angol, Német, Fizika, Mérnök Informatika, Labdarúgás, stb.
    Product: debreceni angol szakkör, budapesti angol szakkör, egri német szakkör, miskolci mérnökInfó szakkör, szegedi mérnökinfó szakkör stb.
    Mindezt a Modell-be belerakva.

    Szerintem a probléma, amit leírsz, nem a creational design patternek témakörébe tartozik. Amit leírtál, mint absztrakt és konkrét osztályok nem factoryk és productok. Az a különbség, hogy ezek mind adatjellegű osztályok, nincs közöttük "ő hozza létre őt" logikai kapcsolat, ergo nem gyárak.

    Úgy hiszem, hogy a problémának két része van, ami megkavarhatott.

    1) A szakkör példányokat (a maguk hierarchiájában) el kell tárolnod a MongoDB-ben. Itt azért befigyel, hogy az SQL táblának semmi köze nincs a Mongo kollekciójához, sokkal könnyebb dolgod van. Szerintem egy szakkör példány = 1 dokumentum a Szakkörök kollekcióban, és olyan tulajdonságai vannak, ami az adott típushoz tartozik. Ne gondolkodj előre megkötött oszlopokkal rendelkező táblákban!

    2) Létre kell hoznod a különböző típusú szakköröket, figyelembe véve a különböző kombinációkat, mert ezzel más és más tulajdonságokat lehet beállítani. Itt jön be az, hogy szerintem a felvázolt osztályhierarchia nem stimmel.

    A legegyszerűbb felállás, hogy adott a szakkör ősosztály, amiben a közös mezők találhatóak (beleértve a szakkör nyelvét), és ennek leszármazottai a ConcreteFactory/AbstractProduct alatt felsoroltak (ahogy szükséges). És ilyen leszármazott osztályokat kell létrehoznod akkor, amikor a felhasználó felvesz egy új szakkört.

    Na most a megfelelő osztály kiválasztása és példányosítása már factory probléma. Az előző hierarchia mellett van egy szakkörgyár, ami valamilyen kulcs alapján létrehozza az új példányt. Ehhez a Factory method minta is elég. A gyár implementálásához meg szükséged van valami támpontra, hogy milyen szakköröket lehet létrehozni.

    Most ennyire van (nincs) időm, remélem volt valami értelme :P
    Kritika természetesen jöhet.

    UI: természetesen a hierarchia mind a modell rétegbe kell hogy kerüljön. A gyár határeset. De ez nem olyan kritikus kérdés szvsz.

Új hozzászólás Aktív témák