[python] class a subclass

Robert Cernansky hslists na zoznam.sk
Sobota Listopad 11 13:01:35 CET 2006


On Sat, 11 Nov 2006 12:28:31 +0100 mtip <mtip na atlas.cz> wrote:

> RC> Toto treba zohladnit aj v tej template. Cize nesmu sa mixovat
> RC> vseobecne veci s konkretnymi SQL do jednej metody. Ked si teda
> RC> povieme, ze table je template nesmieme urobit taku vec, ze create()
> RC> bude v template pracovat s fields a tbl a odvodena bude pracovat
> RC> s sqlText.
> 
> Ano tohle se mi zda byt spravna teorie dle OOP a presne pochopeni
> meho problemu, jenze ta rodicovska class table je uz sama o sobe
> funkcni a puvodne byla vyvinuta jako posledni potomek a ne
> template. Tj staci ji predat v metode create(table,seznamFields)
> a ona uz pracuje v pameti sama. Pridava zaznamy, meni je,
> odstranuje, umi undo, vraci jednotlive pole, edituje po presunu na
> jiny zaznam, posila udalosi BeforeUpdate, AfterUpdate, Current a atd
> atd.

table ako posledny potomok sa mi zda nespravny navrh. Najjvysie ma byt
daco vseobecne a postupne ako dedis implementujes viac low-level
operacie. Ak su udalosti BeforeUpdate,... vseobecneho charakteru, tak
ich samozrejme implementuj do template. Cize ta funkcnost tam
bude. Ale vzdy budes pouzivat instanciu uz konkretnej odvodenej
triedy. Cize sqlInst.BeforeUpdate(), nie
tableInst.BeforeUpdate(). Nikdy nie je treba pracovat priamo z table,
vsetko sa zdedi, prekryju sa len metody na operacie s konkretnym
engine (sql, subor).

> Takze bych ji rad zachoval i takto, pro pripad, ze jindy budu chtit
> pracovat pouze v pameti a navic nemusim opisovat vetsi casti kodu v
> pripadnych potomcich (treba v pripade, ze misto SQL pouziju ukladani
> do souboru).

Ak chces pracovat priamo s pamatou, tak vytvor dalsiu odvodenu classu
mem(table) a prekry prislusne metody sqlCreate a sqlRefresh. Podobne
vytvor classu pre subor. Nebudes opisovat nic zbytocne lebo prepisujes
_len_ to, co je rozdielne pre konkretny engine.

Samozrejme chcelo by to lepsi nazov na tie metody, napr. engineCreate,
engineRefresh.

> Pak se ale porad potvrzuje, ze kdybych ji navrhl, tak ze vsechny
> verejne metody budu volat class.method(self,param), udrzim si
> i lehce funkcnost pro pripadneho potomka. Tim udrzim izolacni odstup
> rodice od potomka ve zpetnem smeru. Rodic pak nikdy nepouzije metodu
> potomka a to se mi zda spravne, jedine v pripade, ze metoda v rodici
> je template je nutne ji volat self.method(). Zda se to byt spravny
> zaver ?

Celkom nerozumiem ale v kazdom pripade rodic musi pouzit metodu
potomka, ked chce robit operacie nad konkretnym engine. Podobne ako je
to v metode table.create  - 'tbl, fields = self.sqlCreate(sqlText)'.

Robo


-- 
Robert Cernansky
E-mail: hslists na zoznam.sk
Jabber: HS na jabber.sk



Další informace o konferenci Python