[PHP]Špatně navržená struktura vlastností

Webdesign, HTML, CSS, Flash, PHP, ASP, .NET, JavaScript. Kritika www stránek na Smetišti.

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Václav M. 10. 3. 2021 00:09

Mám napsané vlastní nástroje na generování (nejen) HTML kódu. Ty měly určitou vnitřní strukturu vlastností, která však měla své nedostatky. A přesto tyto nástroje fungovaly.

Leč rozhodl jsem se (právě kvůli nedostatkům té původní struktury) tyto nástroje přepsat - a alespoň některé nedostatky tak odstranit.

:arrow:
U základní třídy byla změna struktury jednoduchá. Tato základní třída totiž vytvoří jednu zadanou značku - párovou či nepárovou, podle zadání.

:arrow:
Jenže ve třídách sestavujících větší bloky HTML kódu (mající dvě nebo tři úrovně) potřebuji mít styly, atributy atd. rozděleny podle toho, v které úrovni budou použity.

A tady právě nastává ten problém s tím, že jsem si špatně navrhl strukturu těch vlastností - i když původně to vypadalo, že by to mohlo být dobré řešení. Ale tak to bylo jen do chvíle, než jsem potřeboval zadat styly a atributy.

Plán byl na takovouto strukturu:
Kód: Vybrat vše
$this -> top_level -> in_use
$this -> top_level -> elements
$this -> top_level -> styles
$this -> top_level -> attributes


Takováto struktura je sice OK, ale jen u té top_level. U bottom_level či middle_level už je ale problém, že těch značek může být více. A je potřeba styly a atributy odlišit pro každou tu značku - ať už budou odlišeny číselně nebo názvem.

Takže struktura v těch dalších úrovních by byla (přibližně) takováto:
Kód: Vybrat vše
$this -> bottom_level -> in_use
$this -> bottom_level -> elements
$this -> bottom_level[název či pořadí značky] -> styles
$this -> bottom_level[název či pořadí značky] -> attributes


Nebýt položek in_use a elements, problém by (asi) nevznikl. Jenže nevím (nejsem si jistý), jak to napravit. Jakou tedy zvolit strukturu. Velmi nerad bych totiž měl název či pořadí značky jako klíče polí stylů či atributů. Stačí totiž, že atributy samy mohou mít více hodnot.
Václav M.
Junior
Uživatelský avatar

Odeslat příspěvekod Just_jo 10. 3. 2021 16:42

Co použít bottom_level a podobné jako Array of?
Nebo to vzít jako koncept objektu, kde se prvně vytvoří objekt a později se pomocí nové fce importuje.
Ale těžko vařit z vody, když nevidíme vnitřní postup.
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod Václav M. 10. 3. 2021 23:55

Jako pole objektů mám již seznam použitelných značek. Tyto objekty jsou (i s jejich hodnotamu) tvořeny prostřednictvím konstruktoru třídy ElementsProperties.

Tamní struktura je takováto:
Kód: Vybrat vše
$this -> elements_list[název značky] -> closing_part
$this -> elements_list[název značky] -> siblings

kde siblings je buď pole (obsahující seznam značek, které mohou vloženy do dané značky) nebo řetězec určující, že značka je prázdná nebo že může obsahovat pouze text (bez značek). closing_part tak svým způsobem vytváří duplicitu k siblings.

:arrow:
bottom_level by právě měla být podobným polem objektů - jen by v některých případech místo názvů značky byly pouze číselné hodnoty. A místo closing_part a siblings by byly attributes a styles.

Jenže to by tam nesměly být ty podřízené objekty in_use a elements. Bez in_use by se možná dalo nějakým způsobem obejít. Ale horší je to s elements.

:arrow:
Konstruktor třídy ElementsProperties je připraven tak, že nejsou-li zadány žádné argumenty, pouze se vytvoří objekt dané třídy. Jsou-li argumenty předány, jsou použity jako hodnoty pro jednotlivé vlastnosti dané třídy, jejíž objekt je vytvořen.

Konstruktor je součástí třídy Memory z jiného projektu. Typ hodnot je ověřen podle typu uvedeného v anotaci jednotlivých vlastností rozšiřující třídy.

:arrow:
Otázka tak je, kam přemístit in_use a elements tak, aby je bylo možné stále použít a bylo dodrženo rozlišení jdnotlivých vrstev generovaného HTML kódu.

:?:
in_use by bylo možno vyčlenit a udělat z ní samostatný objekt, protože je důležitý jen pro top_level. Ale co s elements?
Václav M.
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků