Guia PES

Models

Els diagrames que es demanen, amb un exemple complet

L'àgil no gira al voltant dels models, però alguns aporten molt i formen part de la documentació. Tots els exemples són d'una mateixa app inventada que complementa el Bicing amb dades d'Open Data BCN.

Obligatori · Fag-2 i sprints

Model conceptual (diagrama de classes UML)

Els conceptes principals del problema, independents de l'arquitectura i de la tecnologia. Es valora que hi hagi conceptes creatius i propis, no només els del conjunt de dades obertes.

Usuariemail: Stringnom: StringdataAlta: DataTrajecteid: Naturalinici: DataHorafi: DataHorakm: RealEstacióid: Naturalnom: Stringubicació: CoordenadabicisLliures: NaturalInsígnianom: Stringdescripció: Stringpunts: Natural1*fa ▸*1origen*0..1destí**aconsegueix ▾**preferidesRestriccions d'integritatRI1. Claus: (Usuari, email), (Estació, id), (Trajecte, id)RI2. fi > iniciRI3. km >= 0RI4. El destí, si existeix, és diferent de l'origenVe de les dades obertesConcepte nou de l'equip
Fixeu-vos: només Estació ve de les dades obertes. Trajecte i Insígnia són conceptes nous de l'equip, i és aquí on hi ha el valor del producte.
Restriccions d'integritat sempre a sota del diagrama, numerades: claus i regles que el diagrama no pot expressar.
Opcional · recomanat

Diagrama de classes de la capa de domini

La lògica de la solució dins una arquitectura en tres capes, ja amb patrons de disseny aplicats i operacions. Expliqueu quins patrons feu servir i per què.

ServeiEstacións- memòria: Estació[*]+ properes(p: Posició): Estació[*]+ refresca()«interface»FontEstacións+ obtenirEstacións(): Estació[*]AdaptadorOpenDataBCN+ obtenirEstacións(): Estació[*]AdaptadorCSV+ obtenirEstacións(): Estació[*]FontFalsa+ obtenirEstacións(): Estació[*]1Patró Adapter: el domini no depèn del format de les dades obertes. Canviar de font (API, CSV, mock) no toca ServeiEstacións.
Obligatori · Fag-2 i sprints

Diagrama físic (arquitectura)

Els nodes i subsistemes del sistema: app, servidor, base de dades, serveis externs i el servei que feu per a un altre equip. Un esbós a la incepció que aneu refinant a cada sprint.

ClientsServeis externsApp mòbilFlutter · Android · iOSWeb d'administracióFlutter WebEquip Cconsumeix el nostre serveiGoogle Maps · Sign-InSDK dins de l'appNAT de la FIBnattech.fib.upc.edu:40330 → VM :8080Cloudflare TunnelHTTPS (opcional)HTTP · JSONvirtech · FIBMàquina virtual Ubuntu · OpenNebulaDocker ComposeNginx:8080 · proxy inversAPI RESTNode.js + Express:3000 · /api/v1 · /docsRedismemòria cau i sessionsPostgreSQL + PostGIS:5432Volum uploads/imatges dels usuaris:8080/apiSQLGitHub Actions runner (self-hosted)git pull · docker compose up -ddesplegaSense còpies de seguretat: tot s'ha de poder recrear des de GitHubOpen Data BCNBicing (GBFS) · JSONServei de l'equip BREST · el consumimFirebase Cloud Messagingnotificacions pushGETRESTpushnotificació pushGitHubrepos front i back · CIconnexió sortint:el runner demana feinapetició (HTTP, SQL)CI/CD i desplegamentnotificació push
Opcional

Diagrama de components (UML)

Una visió simplificada de tot el sistema i de les relacions entre components.

«subsystem» App«UI» Mapa«UI» Perfil:ClientREST«subsystem» API REST:Estacións:Trajectes:Autenticació«subsystem» Serveis externs:Open Data BCN:Servei de l'equip B/api/v1
Obligatori · sprints

Esquema de la base de dades

Un diagrama de classes que descriu l'esquema. En relacional, la clau primària subratllada i les foranes entre parèntesis (FK). En NoSQL, feu servir composició per als documents incrustats i associació per a les referències.

usuariPKemail VARCHARnom VARCHARdataAlta DATEtrajectePKid SERIALFKemail VARCHARFKorigen INTFKdestí INT NULLinici TIMESTAMPfi TIMESTAMPkm NUMERICestacióPKid INTnom VARCHARgeom GEOGRAPHY(Point)bicisLliures INTusuariinsígniaPKemail VARCHARPKnom VARCHARdata DATEinsígniaPKnom VARCHARdescripció TEXTpunts INTPKclau primàriaFKclau forana →
L'esquema canviarà a cada sprint: gestioneu-ne l'evolució amb fitxers SQL de create i alter o amb un framework de migracions (Liquibase, migracions de Django o de Laravel, mysql-migrations per a Node). Més aspectes tècnics →

Errors típics als models