Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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ó

FrameworkLlenguatgePunt d’entradaEncaminamentTemps real
DjangoPythonGestor WSGI o ASGIURLconf (urls.py)Channels, amb ASGI
RailsRubyconfig.ru (Rack)routes.rbAction Cable
SpringJavaDispatcherServlet@RequestMappingWebSocket amb STOMP
LaravelPHPpublic/index.phpFitxers de rutesReverb o Pusher
SymfonyPHPpublic/index.phpAtributs o routes.yamlMercure (SSE)
ASP.NET CoreC#Program.csEndpoint routingSignalR
ExpressJavaScriptapp.js o server.jsapp.get i Routerws o Socket.IO
FastAPIPythonObjecte appDecoradors i APIRouterWebSockets natius
NestJSTypeScriptmain.ts@Controller i decoradorsGateways
GinGofunc mainEncaminador de Gincoder/websocket
Next.jsJavaScriptEstructura de directorisPer fitxersServei a part
PhoenixElixirEndpointrouter.exChannels 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

FrameworkCapa controladoraContenidor IoCPeces transversalsUnitat modular
DjangoViewsNo en téMiddlewareApps
RailsControllersNo en téMiddleware RackEngines i gems
Spring@ControllerApplicationContextFiltres i interceptorsStarters i mòduls
LaravelControllersService containerMiddlewareService providers
SymfonyControllersContenidor de serveisEvent listenersBundles
ASP.NET CoreControllers o minimal APIsIServiceCollectionMiddlewarePaquets NuGet
ExpressGestors de rutaNo en téMiddlewarePaquets npm
FastAPIFuncions de rutaDepends, per peticióMiddleware i dependènciesAPIRouter i paquets
NestJSControllersContenidor propiMiddleware, guards, interceptors@Module
GinHandlersNo en téMiddlewarePaquets
Next.jsRoute handlersNo en téproxy.tsPaquets npm
PhoenixControllersNo en téPlugsContexts

Dades i vista

FrameworkORM habitualPatró de mapatgeMigracionsVista per defecte
DjangoDjango ORMActive RecordIntegradesDjango Templates
RailsActive RecordActive RecordIntegradesERB, amb Hotwire
SpringJPA amb HibernateData MapperFlyway o LiquibaseThymeleaf
LaravelEloquentActive RecordIntegradesBlade
SymfonyDoctrineData MapperDoctrine MigrationsTwig
ASP.NET CoreEntity Framework CoreData MapperEF Core MigrationsRazor o Blazor
ExpressA triarEl de l’ORM triatLes de l’ORM triatCap, motors opcionals
FastAPIA triar, sovint SQLAlchemyData MapperAlembicCap, JSON
NestJSPrisma, Drizzle o TypeORMEl de l’ORM triatLes de l’ORM triatCap, JSON
GinA triar (GORM, sqlc)El de la llibreriaEina externahtml/template
Next.jsA triar (Prisma, Drizzle)El de l’ORM triatPrisma MigrateReact, integrat
PhoenixEcto, que no és un ORMConsultes explícitesIntegrades a EctoHEEx 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.

FrameworkAutenticacióPermisosProtocolsContrasenyes
Djangodjango.contrib.authPermisos i grupsOIDC per paquetsPBKDF2
RailsGenerador d’autenticacióLlibreries (Pundit)OmniAuthbcrypt
SpringSpring Security@PreAuthorizeOAuth2, OIDC i SAMLBCrypt delegat
LaravelFortify i SanctumGates i PoliciesPassport i Socialitebcrypt o Argon2
SymfonySecurityBundleVotersBundles (OAuth, SAML)Argon2id
ASP.NET CoreIdentityPolítiquesOIDC i JWT integratsPBKDF2
ExpressCap (Passport)CapEstratègies de PassportLlibreria
FastAPIAjudes per a OAuth2Per dependènciesOAuth2 i JWT per llibreriaLlibreria
NestJSGuards amb PassportGuards i decoradorsEstratègies de PassportLlibreria
GinCapCapLlibreriesx/crypto/bcrypt
Next.jsLlibreries (Better Auth)Al proxy.tsProveïdors de la llibreriaLlibreria
PhoenixGenerador phx.gen.authAl contextUeberauthbcrypt

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.

Last change: , commit: 52620c8