Help Faulty Design!


Épp "rajzolgatós progit" csinálok. Az elvárás valami olyasmi, a felhasználó ne csak egyszerűen rajzparancsokat tudjon definiálni, hanem ún. layereket is. Egy layer (vagy sprite) egy "vászon a vászonon", vagyis egy olyan logikai egység a képen, ami egybe tud fogni több rajzolási parancsot, és utána ezekre egységesen lehet hivatkozni (pl. ha definiálod a "nyuszi" layert, amire kirajzolsz egy csomó kört meg vonalat, amiből kijön a nyuszi, akkor később, amikor ebbe bele akarsz zoomolni, vagy odébb akarod taszigálni a vásznon, nem kell minden kört és vonalat újradefiniálni, elég lesz csak a "nyuszi" layert odébbtolni).

Az első ötletem az volt, hogy lesz egy Shape nevű absztrakt ős-osztályom, aminek lesz egy absztrakt paint nevű metódusa. Ennek lesznek gyermek-osztályai (line, arc stb.), akik implementálják a paint metódust. Amikor a Layer osztály kirajzolja magát, akkor pusztán annyit kell tenni, hogy végigiterál azokon a Shape-származékokon, amik hozzá lettek regisztrálva, és mindegyiknek meghívja a paint metódusát. Mivel a felhasználás során várhatóan egy csomó transzformációnak lesz kitéve maga a Layer, ami az egyes Shape-eket meghatározó koordináták újraszámolását igényli, ezért az első ötletem az volt, hogy a koordinátákat nem az egyes Shape-gyermekek példányai fogják tárolni, hanem magának a Layer-nek lesz egy változója, ami egy egybefüggő memóriaterületen eltárolja az összes rajzolóparancs összes pontját, így a geometriai transzformációknál elég lesz ezen a memóriaterületen végigiterálni, ami tippem szerint gyorsabb, mint egyenként végigugrálni az egyes Shape-eken.

Amikor egy bizonyos technikai részletkérdéssel felmentem a stackoverflow.com-ra és elmeséltem a problémát (http://stackoverflow.com/questions/10915568/is-it-possible-to-declare-a-virtual-static-constant-value-in-a-c-class) az egyik commentemben, azt a választ kaptam, hogy ez így hibás design és javasolták a Head First Design Patterns című könyv tanulmányozását (amire most se pénzem, se időm nincs, sajnos, pedig tényleg érdekesnek hangzik).

Azóta gondolkodom rajta, hogy vajon miért olyan hibás ez a design, illetve, hogy mit kéne benne máshogy csinálni, hogy egy hozzáértő is azt mondja rá, hogy jó a design.

Van bármi ötletetek?

Tagek:
 
Utoljára módosította SAdam 2012.VI.08 11:22-n; 13 hozzászólás;
Bejegyzés módosítása | PermaLink
Votes disabled.

A programozás olyan...


A programozás olyan, mint a szex koton nélkül.

Egy aprócska hiba, és életed végéig támogathatod.

Tagek:
 
Utoljára módosította UPi 2012.VI.08 11:12-n; 0 hozzászólás;
Bejegyzés módosítása | PermaLink
Votes disabled.