Frameworks un per un
Cada framework posa un nom diferent a les mateixes coses, i aquest vocabulari és bona part del que fa que projectes que s’assemblen molt ho semblin poc. Aquestes taules serveixen de traducció i, on la decisió no és només de nom, diuen també què fa cadascun per defecte. Els conceptes que hi surten són els d’Arquitectura dels frameworks.
Per on entra la petició
| Framework | Llenguatge | Punt d’entrada | Encaminament | Temps real |
|---|---|---|---|---|
| Django | Python | Gestor WSGI o ASGI | URLconf (urls.py) | Channels, amb ASGI |
| Rails | Ruby | config.ru (Rack) | routes.rb | Action Cable |
| Spring | Java | DispatcherServlet | @RequestMapping | WebSocket amb STOMP |
| Laravel | PHP | public/index.php | Fitxers de rutes | Reverb o Pusher |
| Symfony | PHP | public/index.php | Atributs o routes.yaml | Mercure (SSE) |
| ASP.NET Core | C# | Program.cs | Endpoint routing | SignalR |
| Express | JavaScript | app.js o server.js | app.get i Router | ws o Socket.IO |
| FastAPI | Python | Objecte app | Decoradors i APIRouter | WebSockets natius |
| NestJS | TypeScript | main.ts | @Controller i decoradors | Gateways |
| Gin | Go | func main | Encaminador de Gin | coder/websocket |
| Next.js | JavaScript | Estructura de directoris | Per fitxers | Servei a part |
| Phoenix | Elixir | Endpoint | router.ex | Channels i LiveView |
La columna de temps real diu qui porta el canal permanent a dins i qui el delega a un servei a part, que és una decisió de desplegament abans que de codi.
Com s’estructura el codi
| Framework | Capa controladora | Contenidor IoC | Peces transversals | Unitat modular |
|---|---|---|---|---|
| Django | Views | No en té | Middleware | Apps |
| Rails | Controllers | No en té | Middleware Rack | Engines i gems |
| Spring | @Controller | ApplicationContext | Filtres i interceptors | Starters i mòduls |
| Laravel | Controllers | Service container | Middleware | Service providers |
| Symfony | Controllers | Contenidor de serveis | Event listeners | Bundles |
| ASP.NET Core | Controllers o minimal APIs | IServiceCollection | Middleware | Paquets NuGet |
| Express | Gestors de ruta | No en té | Middleware | Paquets npm |
| FastAPI | Funcions de ruta | Depends, per petició | Middleware i dependències | APIRouter i paquets |
| NestJS | Controllers | Contenidor propi | Middleware, guards, interceptors | @Module |
| Gin | Handlers | No en té | Middleware | Paquets |
| Next.js | Route handlers | No en té | proxy.ts | Paquets npm |
| Phoenix | Controllers | No en té | Plugs | Contexts |
Dades i vista
| Framework | ORM habitual | Patró de mapatge | Migracions | Vista per defecte |
|---|---|---|---|---|
| Django | Django ORM | Active Record | Integrades | Django Templates |
| Rails | Active Record | Active Record | Integrades | ERB, amb Hotwire |
| Spring | JPA amb Hibernate | Data Mapper | Flyway o Liquibase | Thymeleaf |
| Laravel | Eloquent | Active Record | Integrades | Blade |
| Symfony | Doctrine | Data Mapper | Doctrine Migrations | Twig |
| ASP.NET Core | Entity Framework Core | Data Mapper | EF Core Migrations | Razor o Blazor |
| Express | A triar | El de l’ORM triat | Les de l’ORM triat | Cap, motors opcionals |
| FastAPI | A triar, sovint SQLAlchemy | Data Mapper | Alembic | Cap, JSON |
| NestJS | Prisma, Drizzle o TypeORM | El de l’ORM triat | Les de l’ORM triat | Cap, JSON |
| Gin | A triar (GORM, sqlc) | El de la llibreria | Eina externa | html/template |
| Next.js | A triar (Prisma, Drizzle) | El de l’ORM triat | Prisma Migrate | React, integrat |
| Phoenix | Ecto, que no és un ORM | Consultes explícites | Integrades a Ecto | HEEx i LiveView |
Als microframeworks el patró de mapatge no el marca el framework sinó l’ORM que triïs, i n’hi ha que et deixen triar a tu. La columna de la vista, per la seva banda, deixa veure a simple cop d’ull quins frameworks esperen servir HTML i quins esperen servir dades. I a Rails el nom de l’ORM és literalment Active Record, cosa que explica per què el patró es coneix tant: Rails el va convertir en la manera per defecte de fer aplicacions web durant una dècada. La columna de migracions es llegeix amb les tres famílies de Migracions de l’esquema.
Seguretat
Els protocols i els algorismes són els mateixos per a tothom, i estan explicats a Tecnologies, protocols i pràctiques; el que canvia és quins parla el framework sense ajuda i què fa servir per defecte.
| Framework | Autenticació | Permisos | Protocols | Contrasenyes |
|---|---|---|---|---|
| Django | django.contrib.auth | Permisos i grups | OIDC per paquets | PBKDF2 |
| Rails | Generador d’autenticació | Llibreries (Pundit) | OmniAuth | bcrypt |
| Spring | Spring Security | @PreAuthorize | OAuth2, OIDC i SAML | BCrypt delegat |
| Laravel | Fortify i Sanctum | Gates i Policies | Passport i Socialite | bcrypt o Argon2 |
| Symfony | SecurityBundle | Voters | Bundles (OAuth, SAML) | Argon2id |
| ASP.NET Core | Identity | Polítiques | OIDC i JWT integrats | PBKDF2 |
| Express | Cap (Passport) | Cap | Estratègies de Passport | Llibreria |
| FastAPI | Ajudes per a OAuth2 | Per dependències | OAuth2 i JWT per llibreria | Llibreria |
| NestJS | Guards amb Passport | Guards i decoradors | Estratègies de Passport | Llibreria |
| Gin | Cap | Cap | Llibreries | x/crypto/bcrypt |
| Next.js | Llibreries (Better Auth) | Al proxy.ts | Proveïdors de la llibreria | Llibreria |
| Phoenix | Generador phx.gen.auth | Al context | Ueberauth | bcrypt |
Aquesta taula torna a dibuixar l’eix d’opinió amb una sola paraula: allà on hi diu “cap” tens tota la llibertat i tota la feina, mentre que els generadors de Rails i Phoenix són el terme mitjà, perquè et donen el codi fet però te’l deixen al projecte perquè el mantinguis tu.