Proiect adăugat de
Ciobanu Laurențiu
Categoria Software - Utilitar
20 august 2018
Descriere scurtă:
Zuu este un framework web construit pentru backend. Este dezvoltat pentru platforma NodeJS. Se pot realiza pattern-urile de MVC, REST API si GraphQL. Se pot folosii atat baze de date relationale (majoritatea dialectelor importante sunt suportate) cat si bazate pe documente (MongoDB). Este contruit in jurul ideei de microservicii containerizate insa se poate realiza si o arhitectura de tipul monolith.
Framework-ul tinteste sa incurajeze codul frumos si delcarativ folosindu-se in mare parte de decoratori.
Principala inspiratie este Angular 4+ dar exista idei preluate si din Entity Framework si Symfony.
De asemenea pentru demo am creat un forwarder pentru un REST API folosind feature-urile de GraphQL oferite de framework. ( https://infoeducatie-graph-api.appspot.com/api/graph/playground )
Framework-ul este construit in TypeScript si este proiectat sa ruleze pe un runtime de NodeJs, intr-un mediu containerizat (containere Docker spre exemplu). Infrastructura permite atat proiecte monolith cat si microservicii.
Design pattern-ul predominant este cel al decoratorului. Totul este foarte simplu pentru programatorul care foloseste framework-ul. Creaza o clasa, pune anotatia corecta si in functie de componenta extinde o alta clasa, de aici @zuu se ocupa de restul (ex: inregistreaza rute, creaza coloane si table in baza de date, valideaza input-ul user-ului, etc…). Pentru toate aceste lucruri este nevoie de un engine de reflectie foarte potent. Acesta este @zuu/mirror care reflecta clasele dar si permite crearea de decoratori (chiar si utilizatorul isi poate declara decoratori custom). Package-ul se foloseste de api-ul nativ de reflectie din ESNext si de feature-urile de decoratori prezente in TypeScript.
Printre feature-uri se numara si un injector si container de Dependency Injection, manager de configuratie ce se integreza cu sistemul de DI, un event bus, sisteme de debugging si logging, un bootstrap care face initializarea aplicatiei super usoara si un CLI (under heavy development) care ajuta la generarea de proiecte noi, componente, entitati, etc.
Framework-ul este un sistem database-agnostic astfel nu conteaza ce baza de date este folosita. Aceasta poate sa fie schimbata chiar in productie sau development fara niciun fel de modificari asupra codului. Suporta atat baze de date relationale (Microsoft MySQL Server, Maria, Postgres, Oracle Database, sqlite3) cat si baze de date bazate pe documente (MongoDB). Aceasta decuplare de baza de date este realizata in 2 layere. Primul este layer-ul de entitati (o entitate este o clasa ce descrie un obiect din baza de date), iar al doilea este layer-ul de abstractie de baza de date.
Partea de routing este de asemenea suportata de framework cu ajutorul controllerelor si a actiunilor (GET,POST,PATCH,DELETE). De asemenea se pot declara interceptori, middleware-uri, error handlers si listeners. Ca server se poate folosii oricare dintre modulele populare: express, hapi si koa dar de asemenea exista o intefata de driver custom astfel se poate folosii orice package. Deasupra routing-ului sta un package ajutator (@zuu/owl) ce permite crearea de API-uri ce suporta GraphQL folosind doar decoratori pentru crearea schemelor SDL si a resolver-elor.
Mai multe detalii se pot gasii in documentatia disponibila in repo-ul de git dar si pe site.
Pentru teste de unitate s-a folosit Mocha, chai (pentru asertie) si chakram (pentru teste legate de REST API). De asemenea se urmeaza pattern-ul de Continuous Integration, procesele de build si testing fiind efectuate de CircleCI.
Toate proiectele înscrise la GREPIT 11