TreeStructInfo 2.0 w praktyce
Realne zastosowania, kompletne przykłady i scenariusze użycia
TreeStructInfo 2.0 to formalny, drzewiasty format opisu danych, który łączy:
W tym artykule skupiamy się wyłącznie na praktycznych przykładach.
1. Silnik reguł biznesowych (np. rabaty)
Cel
Chcemy opisać:
- warunki
- akcje
- współdzielone reguły
- referencje między regułami
Przykład
treestructinfo "2.0" name "Discount Engine"
node Rules
node HighValueOrder
attr Condition "total > 500"
attr DiscountPercent "15"
ref attr AuditRequired
end node
node LoyalCustomer
attr Condition "customer.loyaltyPoints > 1000"
attr DiscountPercent "10"
ref attr AuditRequired
end node
end node
end tree
ref attr AuditRequired "true"
Dlaczego to dobre?
- współdzielona flaga audytu
- brak duplikacji
- możliwość dalszego rozszerzania przez
ref node - nadaje się jako DSL
2. Generator klas / DTO
Cel
Na podstawie drzewa chcemy wygenerować:
- klasę
- pola
- typy
- walidacje
Definicja modelu
treestructinfo "2.0" name "Entity Generator"
node User
attr TableName "users"
node Fields
node Id
attr Type "int"
attr PrimaryKey "true"
attr AutoIncrement "true"
end node
node Email
attr Type "string"
attr Length "255"
attr Unique "true"
end node
node CreatedAt
attr Type "datetime"
end node
end node
end node
end tree
Co można wygenerować?
- klasę PHP / Java / TS
- migrację SQL
- formularz
- walidator
- dokumentację API
TreeStructInfo staje się wtedy formatem wejściowym do generatora.
3. Konfiguracja urządzenia IoT / systemu technicznego
TreeStructInfo wyróżnia się wsparciem dla:
- hex
- bin
- oct
- notacji inżynierskiej
- danych binarnych
Przykład konfiguracji urządzenia
treestructinfo "2.0" name "Device Config"
node Network
attr IP "192.168.0.10"
attr Port "0x1F90"
attr Timeout "5E+03"
end node
node Hardware
attr GPIO_Mask "0b10101010"
attr EEPROM_Address "0xA0"
end node
node Security
attr PublicKeyHex "54726565537472756374496E666F"
attr TokenBase64 "U29tZSBiYXNlNjQgZGF0YQ=="
end node
end tree
Dlaczego tu jest przewaga?
- nie trzeba konwertować ręcznie formatów liczbowych
- dane binarne nie są "obejściem"
- czytelność dla inżyniera systemowego
4. Konfiguracja workflow / stanów
Cel
Zdefiniować:
- stany
- przejścia
- referencje
- wspólne parametry
Przykład
treestructinfo "2.0" name "Order Workflow"
node States
node Draft
end node
node Paid
end node
node Shipped
end node
end node
node Transitions
node Pay
attr From "Draft"
attr To "Paid"
ref attr LogTransition
end node
node Ship
attr From "Paid"
attr To "Shipped"
ref attr LogTransition
end node
end node
end tree
ref attr LogTransition "true"
Korzyści
- brak duplikacji
- możliwość walidacji przejść
- struktura nadaje się do wizualizacji grafu
5. System modułów / plug-inów
Cel
Zdefiniować wspólną bazę modułu i rozszerzenia.
Przykład
treestructinfo "2.0" name "Module System"
node Modules
node Blog
ref node BaseModule
attr Enabled "true"
end node
node Shop
ref node BaseModule
attr Enabled "false"
end node
end node
end tree
ref node BaseModule
attr Version "1.0"
attr Author "Core Team"
end ref node
Co daje ref node?
- centralna definicja wspólnych cech
- brak kopiowania
- modularność
6. Konfiguracja cennika z poziomami dziedziczenia
Cel
Ceny bazowe + warianty.
Przykład
treestructinfo "2.0" name "Pricing"
node Products
node Standard
ref node BaseProduct
attr Price "99.00"
end node
node Premium
ref node BaseProduct
attr Price "199.00"
end node
end node
end tree
ref node BaseProduct
attr VAT "23%"
attr Refundable "true"
end ref node
7. Opis struktury plików / projektu
Cel
Opis architektury systemu w formacie czytelnym maszynowo.
treestructinfo "2.0" name "Project Structure"
node src
node Controllers
end node
node Services
end node
end node
node config
node dev
end node
node prod
end node
end node
end tree
Można z tego:
- wygenerować strukturę katalogów
- sprawdzić zgodność projektu
- walidować architekturę
Największe praktyczne zalety
1. Jawna struktura drzewa
Nie polega na wcięciach — używa node / end node.
2. Wbudowane referencje
Lepsze niż aliasy.
3. Typy liczbowe i techniczne
Hex / Bin / Oct / Scientific / Binary.
4. Separacja definicji i zależności
ref dopiero po end tree.
5. Nadaje się jako DSL
Może być językiem konfiguracyjnym domeny.
Gdzie TreeStructInfo sprawdza się najlepiej?
| Zastosowanie | Przydatność |
|---|---|
| Silnik reguł | |
| Generator kodu | |
| Workflow | |
| IoT / embedded | |
| Moduły plug-in | |
| Proste API |
Podsumowanie
TreeStructInfo 2.0 to format, który:
- dobrze opisuje złożone drzewa danych,
- umożliwia referencje,
- obsługuje dane techniczne,
- nadaje się do generatorów i DSL,
- zachowuje czytelność strukturalną.
Nie jest konkurencją dla JSON w API ani dla YAML w DevOps.
Jest natomiast bardzo mocnym kandydatem na formalny język konfiguracji domenowej.
Strona formatu TreeStructInfo:
https://tsinfo.4programmers.net/pl/index.htm
Moja aplikacja online do testowania formatu:
http://www.dariuszrorat.ugu.pl/aplikacje/treestructinfo-tester
Podświetlenie składni użyte w tym artykule:
http://www.dariuszrorat.ugu.pl/blog/wpis/97-podswietlenie-skladni-formatu-treestructinfo-codemirror-i-highlightjs