Abstraktní Wikipedie/Chybová hlášení u objektů ZObject

This page is a translated version of the page Abstract Wikipedia/Error messages on ZObjects and the translation is 100% complete.

V současné době vyhodnocujeme, konstruujeme a validujeme celý ZObject v kódu PHP rozšíření WikiLambda ze serializace JSON uložené ve wiki.

Existují dva hlavní důvody:

  1. Validujeme serializaci JSON: pokud serializace nepředstavuje platný objekt, konstrukce objektu selže. Tímto způsobem zabráníme tomu, aby se do wiki dostal neplatný obsah, což znamená, že můžeme veškerý obsah považovat za platný a můžeme předpokládat, že jsou splněny určité podmínky.
  2. Pro některé úkoly, které wiki potřebuje provádět, jako je získávání štítků, pozdější aliasy a některé specifické pohledy na wiki, musí objekt *splňovat* určité podmínky, jinak wiki vlastně nemůže poskytovat některé základní funkce, jako je vyhledávání nebo zobrazení.

To má několik nevýhod:

  1. Očekáváme, že většinu wiki, včetně jejích typů a validací, bude nakonec moci upravovat komunita. To znamená, že to, co je platné a co ne, se v průběhu času mění a to, co bylo platné v určitém okamžiku, nemusí být platné v jiném okamžiku. Musíme se vypořádat s neplatným obsahem, protože obsah, přinejmenším ve starších revizích, se nakonec stane neplatným - jinak se mohou rozbít základní funkce wiki, jako je historie nebo zobrazení starých revizí.
  2. Kontrola platnosti může být velmi náročná, zvláště pokud platnost kontrolujeme pomocí uživatelských definic typů a validačních funkcí.

Zde je návrh na nápravu:

  1. Zavádíme novou třídu PHP (pravděpodobně podobnou současné třídě ZRecord), která obsahuje dobře formulovanou JSON-reprezentaci libovolného ZObjektu, ale není plnohodnotným zrcadlem typu tohoto ZObjektu v PHP.
  2. Pokud to není nutné pro fungování wiki, nevytváříme z objektů ZObjects plné objekty PHP. Dokonce i ZObjekty, které potřebujeme, konstruujeme pouze částečně - ty části, které skutečně potřebujeme pro fungování wiki. Každý z těchto objektů PHP má také člen, ve kterém je uložena jeho dobře formulovaná JSON-reprezentace.
  3. Vše, co je ve wiki uloženo, je zaručeně správně formulované a kanonizované.
  4. Vše, co je uloženo ve wiki, se zaručeně řídí nedotknutelnými pravdami; ty jsou ve wiki pevně zakódovány a nelze je na wiki měnit. Mezi ně patří, že každý objekt musí být Z2/Persistentní objekt, že každý Z2 má štítky atd.
  5. Předpokládá se, že 3 i 4 budou dlouhodobě stabilní.
  6. Kromě bodů 3 a 4 neprovádíme žádnou další validaci.
  7. Při zobrazování uloženého obsahu nebo náhledu provádíme validaci a zobrazujeme chyby.
  8. Před uložením může přispěvatel buď zobrazit náhled, nebo vyvolat validaci, případně se validace vyvolá automaticky a přispěvateli se zobrazí seznam chyb. Tlačítko "publikovat" může být v případě chyb zašedlé nebo se nezobrazí.
  9. Jakmile se však rozhraní API vyvolá za účelem uložení, učiníme tak i v případě chyb validace - nikoli však v případě chyb ve správném tvaru nebo chyb proti jasným pravdám.
  10. Neplatné ZObjekty *vždy* používají obecný prohlížeč a editor, nikoli konkrétní (protože by mohly být porušeny požadavky na konkrétní prohlížeč).
  11. V obecném prohlížeči se také zobrazí seznam všech případných chyb validace.

Viz též