Bolo veľmi ťažké nájsť dobrý spôsob ako tvoriť aplikácie v Total.js. Nikdy som nebol teoretik, ale tento Total pattern je fakt skvelý.
Jednoduchý pattern pre tvorbu Total.js aplikácií
Total.js framework vyvíjam už niekoľko rokov a veľmi dlhý čas z tohto vývoja som hľadal vhodný spôsob, ako tvoriť aplikácie. Vytvoril som veľmi veľa aplikácií a stále to nebolo ono, preto som sa trošku inšpiroval Node.js modulom Mongoose.js a jeho schémami.
Total.js schémy
Považujem ich za základnú stavebnú jednotku všetkých Total.js aplikácií, pretože do schém ukladám celú business logiku, validácie a všetko okolo toho. Pomocou schém sa mi podarilo urobiť poriadok a prehľadnosť v zdrojových kódoch všetkých aplikácií. Takže na otázku čo sú vlastne Total.js schémy? Odpoviem jednoducho, že schéma je len nejaký objekt s preddefinovanou štruktúrou vlastností a metód, nič viac.
Hlavné výhody
- dodáva prehľadnosť do kódu
- podporuje veľa dátových typov (
String
,Boolean
,Number
,Date
,Email
,Phone
, atď.) - podporuje validácie
- podporuje klasické CRUD operácie
save
,get
,delete
aquery
- podporuje
workflows
- podporuje
transformations
- podporuje
hooks
- podporuje
operations
- podporuje lokalizácie
- podporuje predvolené hodnoty
- podporuje asynchrónne operácie (veľmi dôležitá funkcia)
- vývojár sa môže vždy spoľahnúť na zadefinovaný dátový typ
- ako dátový typ môže byť použitá iná schéma
- má vstavený error handling (veľmi dôležitá funkcia)
- na schému je možné napojiť routing
- vlastnosti, ktoré nie sú definované v schéme, sú automaticky vymazané
- a mnoho ďalšieho
Ukážka schémy
Ak začnete používať Total.js tak narazíte na množstvo divných názvov, ale postupne si určite zvyknete. Funkcia NEWSCHEMA()
vytvorí novú schému a .make()
vytvorí len privátny scope na deklaráciu schémy.
models/newsletter.js:
Takže vytvoril som schému Newsletter
a túto schému teraz môžeme prepojiť s formulárom pre odoberanie noviniek emailom. V prípade, že do schémy pridú iné data, tak framework ich jednoducho odstráni, pretože sa nenachádzajú v schéme.
controllers/api.js:
Ďalšie špecialitky
Error Handling ErrorBuilder
:
Považujem ho za veľmi dôležitú časť frameworku a podporuje skutočne zaujímavé funkcie. Môžete do neho vkladať rôzne chyby (aj viacej naraz), ďalej je prepojený s resources (podpora lokalizácie) a výstup môžete transformovať na čo len chcete (stačí zaregistrovať transformáciu a dokonca nami vytvorenú transformáciu môžete nastaviť ako predvolenú default
). Chyby sa ukladajú do Array
, pričom každá chyba musí mať svoj identifikátor. Zároveň pri automatickom validovaný v schémach ErrorBuilder
obsahuje aj cestu k property
, poprípade Array index
, takže krásne viete zistiť pôvod chyby aj v rôznych vnorených schémách alebo v poli.
V predvolenom režime je výstup ErrorBuilder
veľmi jednoduchý a framework vždy vracia pole:
Na client-side sa dá veľmi jednoducho overiť či data obsahujú chybu:
Následne podľa vlastností v poli name
a path
viete krásne označiť vo formulári, ktorých prvkov sa chyba týka. Moja filozofia prepojenia JSONovo server-side
a client-side
je v 2 podmienkach:
- chyby zo servera sú vždy vracané ako
Array
(viď vyššie uvedený kód) - opak pola, čiže
Object
,String
,Number
,Boolean
je považovaný za požadovanúresponse
Rozšírenie schémy:
Rozšíriť schému (narážam na modulárnosť) je veľmi jednoduché a možete to urobiť na hociktorom mieste v aplikácii:
Auto trim stringov:
Toto bol jeden skvelý nápad pridať do schém. V prípade, že Vám hodnody v string
vlastnostiach obsahujú na začiatku a na konci biele znaky \n
, \r
, \s
, \t
- tak ich framework automaticky odstráni. Môžem Vám z úprimného srdca povedať, že od vtedy ako je toto implementované, mám čisté databázy (hodnotovo). Hodnoty v schéme sú automaticky trimované (by default) a toto správanie sa dá vypnúť cez property schema.trim = false
.
Vnorené schémy:
Ďalšou skvelou funkciou sú vnorené schémy, pomocou ktorých môžete mať prepojené rôzne schémy/modely medzi sebou. Ako príklad uvediem objednávku a jej adresy:
Polia - Array:
Aj Array
môžete zaevidovať ako dátový typ:
Asynchrónne operácie:
Podporujú toho oveľa viacej ako som popísal. Dynamicky viete upraviť volania, návratové hodnoty a dokonca každá inštancia schémy obsahuje skrytý objekt na zapisovanie ďalších potrebných (temporary
) údajov. Tieto údaje sú jednotné skrz všetky asynchrónne operácie.
Validácie:
Total.js sa snaží ušetriť vývojárom kopec roboty a preto aj väčšina validácií je implementovaná v jadre. V prípade, že chcete vytvoriť validáciu na nejakú property
v schéme tak budete postupovať takto:
Predvolené hodnoty:
Schémy podporujú aj metódu na vygenerovanie predvolených hodnôt. Takže v prípade, že sa generuje nová schéma tak je volaný nižšie uvedený delegát.
Meníme hodnoty ešte pred validáciou:
V prípade, že pred validáciou potrebujete upraviť ešte nejaké prijaté hodnoty v schéme, tak je možné využiť metódu podľa nižšie uvedeného kódu:
Schéma bez vlastností/fieldov? No problem
Sú prípady, kedy nepotrebujete definovať žiadne dátové typy / vlastnosti, proste potrebujete nejaký objekt, ktorý má nejaké metódy a v tomto prípade je k dispozícii workflows
, transformations
, operations
, atď., príklad:
Vytvorenie objektu podľa schémy:
Nižšie uvedený kód vytvorý objekt podľa schémy s predvolenými hodnotami a zabalenými internými funkciami. Tento kód je možné volať v celom frameworku - v *.js
súboroch.
Ako skúsiť schémy?
Nemusíte vytvárať projekt na to, aby ste skúsili schémy. Stačí vytvoriť jednoduchý .js
script a odkázať sa na require('total.js')
.
Je toho ešte veľmi veľa čo obsahujú schémy, ale pre rýchly začiatok a predstavu to bude hádam postačovať. Pre vytvorenie schém je možné použiť aplikáciu AppDesigner.
Schémy v projektoch
Nižšie uvedené projekty sú postavené na schémach, takže ak chcete vidieť reálne projekty - tak doporučujem naštudovať tieto zdrojové kódy na GitHube:
- Total.js Eshop + CMS
- Total.js SuperAdmin
- Total.js HelpDesk
Other posts from Peter Širka
- 2024-10-30JavaScript na serveri rýchlo a jednoducho so slovenským Total.js frameworkom
- 2024-02-18Ako lietať s long range dronom?
- 2024-02-09Recenzia drona DJI FPV
- 2024-02-07Recenzia drona DJI Avata
- 2023-01-06Ako spustiť Total.js framework?
- 2023-01-03Inštalácia Node.js + vysvetlenie použitia modulov
- 2022-05-26Základné informácie o Total.js Platforme
- 2021-01-15Je tu Total.js 4 - jeden z najlepších Node.js frameworkov
- 2020-02-12Total Avengers
- 2019-09-18JavaScript core pre Pie a Donut SVG grafy