📄️ Intro
I servizi sono un modo di modularizzare il codice spostando parte della business logic più complessa fuori dall'handler dalla query/comando: un servizio richiamabile incapsula questa logica e fornisce un'interfaccia verso di essa.
📄️ Data Loader
Dal momento che alcune operazioni sul backend di Hydra richiedono un numero non trascurabile di chiamate al DB, e che eseguire queste ultime in modo sequenziale comporterebbe un calo inaccettabile delle prestazioni, sono impiegate alcune ottimizzazioni a riguardo: la più importante riguarda l'uso dei DataLoader, ovvero degli servizi interni che fungono da proxy rispetto al DB, il cui compito è quello di intercettare tutte le richieste in lettura avviate in una stessa finestra temporale (configurabile, di solito 5 ms) e di aggregarle in un'unica query verso il DB. Le richieste in lettura supportate da questo meccanismo riguardano entità singole (identificate dal proprio ID o dalla coppia ID+Sito).
📄️ Entity Services
Gli entity services sono servizi specifici per un tipo di entità, che forniscono metodi utili ai query/command handler per poter caricare, manipolare e archiviare gli oggetti di tale tipo. Gli entity services generalmente espongono metodi CRUD, più altri metodi speciali relativi all'entità in discussione (es. BlueprintsService contiene un metodo ResolveBlueprint(..), oltre ai metodi CRUD simili tra tutte le entità).
📄️ Packing/Unpacking
In questa pagina verranno descritte delle operazioni effettuate frequentemente sui page element. Il codice che implementa le operazioni di seguito descritte si trova nella directory Application/Services/PageElementServices: questi servizi vengono utilizzati dai mapper per le operazioni di packing/unpacking dei campi page element nelle entità.
📄️ Site Tree Service
Il SiteTreeService è un servizio di livello applicativo che fornisce in modo rapido una rappresentazione dell'intero albero del sito. Il site tree service è utilizzato (tipicamente dai mapper) per ottenere informazioni riguardo alle relazioni tra pagine, come ad esempio ottenere la lista di antenati, oppure verificare l'assenza di cicli genitore-figlio in seguito ad uno spostamento della pagina nella gerarchia.
📄️ Template Repository
La Template Repository è un servizio di livello applicazione che elenca e fornisce i template dei page element e le definizioni delle macro in formato originale (DSL). E' accessibile via dependency injection tramite IPageElementTemplateRepository.