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.
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:
| Fizika | Orb |
|---|---|
| Objekti v vesolju | Entitete (podatki) |
| Sile povzrocijo gibanje | Dogodki sprozijo obnasanje |
| Zakoni urejajo gibanje | Pogoji nadzirajo prehode |
| Reakcije | Ucinki |
| Stabilne orbite | Veljavna 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:
- Oblikovati programe - modelirati kompleksne aplikacije kot entitete in lastnosti
- Pisati pogoje - implementirati natancna dovoljenja
- Ustvarjati ucinke - upravljati strezniski in odjemalska dejanja
- Povezovati Orbital enote - graditi modularne, komunikatne funkcionalnosti
- Namescati aplikacije - od programa do produkcije
Naslednji koraki
- Namestite CLI - pridobite CLI Orb na svoj sistem
- Zgradite upravljalnik nalog - vas prvi program
- Kljucni koncepti: Entitete - poglobitev v temelje
Pripravljeni na revolucijo v nacinu gradnje programske opreme? Zacnimo!