Preskoči na vsebino

Uvod v Orb

Fizika programske opreme: Naravni jezik → Program → Produkcijska aplikacija

Kaj je Orb?

Orb je deklarativni programski jezik za gradnjo celosteznih aplikacij. Namesto pisanja imperativne kode, razprsene po sprednjem in zalednem delu, svojo aplikacijo deklarirate kot program iz:

  • Entitet - Vasih podatkovnih struktur s pravili trajnosti
  • Lastnosti - Obnasanja, definiranega z avtomati stanj
  • Strani - Poti z vezavami UI

Prevajalnik Orb pretvori ta program v celotno, za produkcijo pripravljeno aplikacijo.

OrderLifecycleFulfillment/orders/track
Orbital Unit = Entity + Traits + Pages

Problem, ki ga Orb resuje

Tradicionalni razvoj

Ekipa za sprednji del   Ekipa za zaledni del   Ekipa za podatkovno bazo
| | |
v v v
React koda + Express API + Shema/SQL
| | |
v v v
Dovoljenja + Dovoljenja + Omejitve
| | |
v v v
Testiranje + Testiranje + Testiranje

Tezave:

  • Poslovna logika podvojena med plastmi
  • Dovoljenja razprsena v middleware, poteh in poizvedbah
  • Dokumentacija locena od kode
  • Testiranje zahteva vec pristopov

Razvoj z Orb

Orb program (.orb datoteka)
|
v
orb compile
|
v
Celostezna aplikacija
- React sprednji del
- Express zaledni del
- Modeli podatkovne baze
- Dovoljenja
- Dokumentacija

Prednosti:

  • En vir resnice
  • Dovoljenja v pogojih (na enem mestu)
  • Program JE dokumentacija
  • Avtomati stanj so inherentno preverljivi

Kljucni koncepti

1. Entitete

Entitete definirajo, kaj vasa aplikacija upravlja:

{
"ime": "Task",
"trajnost": "trajno",
"polja": [
{
"ime": "title",
"tip": "niz",
"obvezno": true
},
{
"ime": "status",
"tip": "nastevanje",
"vrednosti": [
"pending",
"in_progress",
"done"
]
},
{
"ime": "assignee",
"tip": "relacija",
"cilj": "User"
},
{
"ime": "dueDate",
"tip": "datum"
}
]
}

Tipi trajnosti:

  • persistent - shranjeno v podatkovni bazi (Firestore, PostgreSQL)
  • runtime - v pomnilniku (specificno za sejo)
  • singleton - posamicen globalni primerek

2. Lastnosti

Lastnosti definirajo, kako se vasa aplikacija obnasa, z avtomati stanj:

{
"ime": "TaskLifecycle",
"povezanaEntiteta": "Task",
"kategorija": "interaction",
"strojStanj": {
"stanja": [
{
"ime": "Pending",
"jeZacetno": true
},
{
"ime": "InProgress"
},
{
"ime": "Done",
"jeTerminalno": true
}
],
"dogodki": [
{
"kljuc": "INIT",
"ime": "Initialize"
},
{
"kljuc": "START",
"ime": "Start Working"
},
{
"kljuc": "COMPLETE",
"ime": "Mark Complete"
}
],
"prehodi": [
{
"iz": "Pending",
"dogodek": "INIT",
"do": "Pending",
"ucinki": [
[
"pridobi",
"Task"
],
[
"izrisi-vmesnik",
"main",
{
"tip": "entity-table",
"entiteta": "Task",
"columns": [
"title",
"status",
"assignee"
],
"itemActions": [
{
"dogodek": "START",
"oznaka": "Start"
},
{
"dogodek": "COMPLETE",
"oznaka": "Complete"
}
]
}
]
]
},
{
"iz": "Pending",
"do": "InProgress",
"dogodek": "START",
"strazar": [
"je",
"@entiteta.assignee",
"@currentUser.id"
],
"ucinki": [
[
"nastavi",
"@entiteta.status",
"in_progress"
],
[
"shrani",
"update",
"Task",
"@entiteta"
]
]
},
{
"iz": "InProgress",
"do": "Done",
"dogodek": "COMPLETE",
"ucinki": [
[
"shrani",
"update",
"Task",
"@entiteta"
],
[
"obvesti",
"success",
"Task completed!"
]
]
}
]
}
}

Kljucno spoznanje: Lastnost zdruzuje obnasanje (avtomat stanj) IN UI (ucinki render-ui).

3. Strani

Strani vezejo lastnosti na URL poti. Vsaka Orbital enota potrebuje vsaj eno stran:

{
"ime": "TaskListPage",
"pot": "/tasks",
"znacilnosti": [
{
"sklic": "TaskLifecycle",
"povezanaEntiteta": "Task"
}
]
}

Celotna Orbital enota zdruzuje vse tri dele:

{
"ime": "TaskManager",
"entiteta": {
"ime": "Task",
"trajnost": "trajno",
"polja": [
{
"ime": "title",
"tip": "niz",
"obvezno": true
},
{
"ime": "status",
"tip": "nastevanje",
"vrednosti": [
"pending",
"in_progress",
"done"
]
},
{
"ime": "assignee",
"tip": "niz"
}
]
},
"znacilnosti": [
{
"ime": "TaskLifecycle",
"povezanaEntiteta": "Task",
"kategorija": "interaction",
"strojStanj": {
"...": "see above"
}
}
],
"strani": [
{
"ime": "TaskListPage",
"pot": "/tasks",
"znacilnosti": [
{
"sklic": "TaskLifecycle",
"povezanaEntiteta": "Task"
}
]
}
]
}

4. S-izrazi

Vsa logika je izrazena kot seznami:

// Pogoj: preveri pogoje
["and",
["=", "@entity.status", "pending"],
[">", "@entity.priority", 3]
]

// Ucinki: izvedi dejanja
["persist", "update", "Task", "@entity"]
["notify", "success", "Task saved!"]
["navigate", "/tasks"]

5. Zaprt krog

Vsako uporabnisko dejanje sledi tej poti:

1. Dogodek  → Uporabnik klikne "Zakljuci nalogo"
2. Pogoj → Preveri: ali je uporabnik izvajalec?
3. Prehod → Stanje: InProgress → Done
4. Ucinki → Streznik: shrani v PB
→ Odjemalec: prikazi toast, osvezi seznam
5. Odgovor → UI se posodobi s pravimi podatki

Zakaj "Orb"?

Orb crpa svoje ime iz nebeske sfere. "Almadar" (المدار) v arabscini pomeni "orbita" in Orb je jezik, rojen iz te vizije. Ime izhaja iz nebeske mehanike:

FizikaOrb
Objekti v vesoljuEntitete (podatki)
Sile povzrocijo gibanjeDogodki sprozijo obnasanje
Zakoni urejajo gibanjePogoji nadzirajo prehode
ReakcijeUcinki
Stabilne orbiteVeljavna stanja aplikacije

Tako kot planeti sledijo predvidljivim potem, ki jih urejajo fizikalni zakoni, aplikacije zgrajene z Orb sledijo predvidljivim potem, ki jih urejajo avtomati stanj.

Kaj boste zgradili

Do konca te dokumentacije boste znali:

  1. Oblikovati programe - modelirati kompleksne aplikacije kot entitete in lastnosti
  2. Pisati pogoje - implementirati natancna dovoljenja
  3. Ustvarjati ucinke - upravljati strezniski in odjemalska dejanja
  4. Povezovati Orbital enote - graditi modularne, komunikatne funkcionalnosti
  5. Namescati aplikacije - od programa do produkcije

Naslednji koraki

  1. Namestite CLI - pridobite CLI Orb na svoj sistem
  2. Zgradite upravljalnik nalog - vas prvi program
  3. Kljucni koncepti: Entitete - poglobitev v temelje

Pripravljeni na revolucijo v nacinu gradnje programske opreme? Zacnimo!