Un buon Service Layer:
- Centralizza l'accesso esterno ai dati e alle funzioni
- Nasconde (astrae) l'implementazione interna e le modifiche
- Consente il versioning dei servizi
Tutti e tre sono critici, perché i servizi sono per sempre. Una volta pubblicati, non si può controllare chi li usa, e le modifiche romperanno qualcosa da qualche parte.
Ecco un esempio reale: un ingegnere ha originariamente codificato gli eventi senza memorizzare un fuso orario. Più tardi, ci siamo resi conto che volevamo visualizzare quegli eventi nel fuso orario dell'utente, il che significava che avevamo bisogno di esporli agli utenti.
Perché avevamo un buon livello di servizio, siamo stati in grado di cambiare l'oggetto dell'evento e lo schema sottostante ma avere le API ancora mostrare il vecchio modo perché l'endpoint API era astratto dall'oggetto da un livello di servizio. Siamo stati anche in grado di mettere fuori una nuova versione dell'endpoint API in modo che gli utenti dell'API potessero decidere se e quando volevano sfruttare i nuovi dati. Senza un livello di servizio (per esempio, se altri avrebbero potuto interrogare i dati direttamente), ci sarebbe stata un'alta possibilità di rottura di altri sistemi.
Infine, molti sistemi aziendali hanno più di un livello. Tipicamente hanno:
- Un livello di persistenza che astrae gli archivi di dati e può anche imporre regole di visibilità;
- Un livello di oggetti che astrae lo schema, definisce le funzionalità specifiche dell'oggetto e gestisce la manutenzione come gli audit trail; e
- Un livello API che assicura funzionalità coerenti indipendentemente da come si accede all'applicazione (UI, mobile, integrazione, ecc.)
Molte startup non hanno questi livelli fin dal primo giorno, perché richiedono tempo prezioso per costruire, tempo che potrebbe essere speso meglio per assicurare l'adattamento al mercato e il successo dei clienti. Ma da qualche parte intorno ai cinquanta clienti, non avere livelli di servizio inizia a diventare sempre più costoso in termini di sforzo di sviluppo e regressioni.