Delphimvc framework: cosa sono i Services?

di il
14 risposte

Delphimvc framework: cosa sono i Services?

Per lo sviluppo dei microservizi in Delphi attualmente sto utilizzando il framework Delphimvc. 

Se le Entities corrispondono ai modelli di un framework wev, cosa sono i Services? 

Allego il link di un esempio tipico in questo framework. 

https://github.com/danieleteti/delphimvcframework/tree/master/samples/articles_crud_server

14 Risposte

  • Re: Delphimvc framework: cosa sono i Services?

    25/07/2024 - GrandfatherCoder ha scritto:


    Se le Entities corrispondono ai modelli di un framework wev, cosa sono i Services? 

    In linea generale, quelli che qui vengono chiamati “Services” sono tutto ciò che rappresenta una implementazione specifica (di un servizio).

    Ad esempio, una classe che implementa l'invio di e-mail, una classe che implementa lo storage di entità (Entities), una classe che fornisce una configurazione, in breve tutto ciò che non appartiene alla “logica di business principale” (dominio) ma che invece fornisce il supporto a una funzionalità che si potrebbe ritenere “pluggabile”; infatti, nell'esempio c'è una interfaccia IArticlesService, che rappresenta il “contratto” a cui deve sottostare quel determinato servizio, e la classe TArticlesService che lo va a implementare a tutti gli effetti (ma si potrebbero avere N altre implementazioni oltre a quella).

    La scelta del nome “TxxxService” in genere non è una buona idea, perché non indica cosa fa quel servizio: una classe con nome TMailService ti suggerisce un “servizio che riguarda mail”, mentre TMailSender è molto più esplicativo e preciso; in questo contesto, viene usato questo nome generico perché siamo in un contesto esemplificativo e dimostrativo.

    A che serve tutto questo? Che vantaggi da? Innumerevoli… E si tratta di concetti non specificatamente legati a DMVC, in questo caso.

    Puoi approfondire il tema anche in questo webinar, dove si parla di principi SOLID, proprio per spiegare il senso di queste architetture e il ruolo dei vari attori.

  • Re: Delphimvc framework: cosa sono i Services?

    Grazie per la tempestiva risposta.

    Mi ha sollevato da diversi dubbi che paventavano in me lo sciocco timore di ritrovarmi degli oggetti a matriosca.

    Nell'interfaccia del Services a cosa servi l'Attributo con la stringa tipo numero di serie?

    Quando avrò più tempo guarderò il video del webinar con più calma.

    In soldoni,le operazioni CRUD le demando ai Services?

    Anche perchè non mi piace il fatto che i metodi dei Controllers possano avere più di quattro righe di codice.

    Bene o male,sembra più consono che un metodo del Controller richiami degli oggetti relativi ai Servizi.

    Grazie ancora.

  • Re: Delphimvc framework: cosa sono i Services?

    26/07/2024 - GrandfatherCoder ha scritto:


    Nell'interfaccia del Services a cosa servi l'Attributo con la stringa tipo numero di serie?

    C'è la spiegazione dettagliata nella documentazione di Delphi: in breve, è un retaggio del supporto a COM che si continua a mantenere.

    Quando crei le tue interfacce, puoi inserirli facilmente premendo Ctrl+Shift+G.

    26/07/2024 - GrandfatherCoder ha scritto:


    In soldoni,le operazioni CRUD le demando ai Services?

    Se parliamo di classi che implementano a tutti gli effetti lo “storage” degli oggetti su database e/o su altro, allora sì.

    Si tratta di implementare il cosiddetto Repository Pattern.

  • Re: Delphimvc framework: cosa sono i Services?

    Il RPD lo usavamo con inventiva nei framework MTV Python per evitare di riempire di codici i metodi delle classi dei modelli oppure i metodi delle rotte; in effetti senza l'ausilio di classi esterne.

    Evitavano anche di riempire i metodi delle rotte rendendo il codice molto più ordinato.

    Un'altra cosa,per i dati persistenti,ricorro all'uso della sessione.Se io per caso avessi bisogno di salvare dei dati nella memoria ram dopo una chiamata HTTP,mi comporto come se scrivessi  codice con un linguaggio di script,sfruttando le sessioni?

    Grazie ancora per la tua disponibilità.

  • Re: Delphimvc framework: cosa sono i Services?

    30/07/2024 - GrandfatherCoder ha scritto:


    Un'altra cosa,per i dati persistenti,ricorro all'uso della sessione.

    Cosa sono i “dati persistenti”? Per me sono le configurazioni, o i dati salvati su un database di qualunque tipo.
    Quanto dovrebbero persistere? La sessione si usa per… la sessione. :)

    30/07/2024 - GrandfatherCoder ha scritto:


    Se io per caso avessi bisogno di salvare dei dati nella memoria ram dopo una chiamata HTTP,mi comporto come se scrivessi  codice con un linguaggio di script,sfruttando le sessioni?

    “Mi comporto come se scrivessi codice con un linguaggio di script” non capisco bene cosa vuol dire.

    Se devi salvare dati nella RAM sul server e sono legati a una utenza che viene riconosciuta con un token mandato via API o tramite cookie, URL o altro mezzo, allora sono dati di sessione.

    Il comportamento è quello di usare gli oggetti preposti alla gestione della sessione, appunto, per salvare queste informazioni o recuperarle.

    Io attualmente prediligo invece l'uso di token, es. JWT, e la memorizzazione di questi dati nel client piuttosto che nel server.

  • Re: Delphimvc framework: cosa sono i Services?

    È sciocco da dire, anche io uso l'autenticazione di tipo JWT. 

    Volevo usare la sessione solo per la fase di registrazione: durante la fase di autenticazione a due fattori dove dopo che l'utente effettua la richiesra e riceve il codice OTP, il server memorizza il numero di telefono e l'ID utente; il primo dati utile in fase di verifica, il secondo per la ricerca del record dell'utente per modificare il campo booleano che verifica se l'utente sua confermato o no. 

    Però ora che ci penso, se lavoro con le ultime versioni di DMVC, posso sfruttare le query RQL senza anelare alla velocità della funzione GetByPk per ottenere record. Giusto? 

    Riguardo alla mia affermazione sul linguaggio di script è che ho sempre usato Delphi solo per lo sviluppo lato Client e mi pare  ancora strano usarlo per il lato Server. 

  • Re: Delphimvc framework: cosa sono i Services?

    31/07/2024 - GrandfatherCoder ha scritto:


    Volevo usare la sessione solo per la fase di registrazione: durante la fase di autenticazione a due fattori dove dopo che l'utente effettua la richiesra e riceve il codice OTP, il server memorizza il numero di telefono e l'ID utente […]

    Queste cose possono (e secondo me dovrebbero) stare in un database.

    31/07/2024 - GrandfatherCoder ha scritto:


    Però ora che ci penso, se lavoro con le ultime versioni di DMVC, posso sfruttare le query RQL senza anelare alla velocità della funzione GetByPk per ottenere record. Giusto? 

    Non so se la domanda è correlata all'altra, perché si fa un po' di confusione. Detto questo, se si vuole fare una query, si possono chiamare metodi oppure sfruttare un linguaggio che converte “interrogazioni” in query… alla fine, comunque la si facca, è una query, punto. :)

    31/07/2024 - GrandfatherCoder ha scritto:


    Riguardo alla mia affermazione sul linguaggio di script è che ho sempre usato Delphi solo per lo sviluppo lato Client e mi pare  ancora strano usarlo per il lato Server. 

    Ok, ma se stai sviluppando con DMVC e stai realizzando un backend con Delphi, non capisco perché la sessione lato server nell'applicazione DMVC Delphi dovrebbe essere realizzata con un linguaggio di scripting, al posto di Delphi (assieme a DMVC), ma usando un linguaggio differente solo per quello. Oppure non ho capito nulla. :)

  • Re: Delphimvc framework: cosa sono i Services?

    Alka, ti ringrazio per il supporto. 

    Credo(e spero) che adesso siamo sulla stessa lunghezza d'onda. 

    Ho completamente abbandonato l'idea di prima perché grazie all'autenticazione JWT credo che la migliore idea sia impostare un'applicazione lato server che sia completamente cookieless. 

    Rischiavo ci creare degli inutili cookies dove ci avrei disgraziatamente messo dentro pure le impostazioni contenute nei files env. 

    Alla fine ho delegato al Service la query. PUNTO

    Ora la API mi pare più professionale rispetto a prima. 

    Riguardo alka connessione con FireDAC, tu la realizzi tramite il Middkeware oppure come me, la configura tramite connettore FD nel WebModule? 

  • Re: Delphimvc framework: cosa sono i Services?

    31/07/2024 - GrandfatherCoder ha scritto:


    Riguardo alka connessione con FireDAC, tu la realizzi tramite il Middkeware oppure come me, la configura tramite connettore FD nel WebModule? 

    Non uso abitualmente DMVC, anche se lo conosco, però tendo ad affidarmi il più possibile ai meccanismi di “dependency injection” presenti nel framework di turno.

  • Re: Delphimvc framework: cosa sono i Services?

    Dici che è troppo esposto il Web Module? 

    La mia potrebbe essere una soluzione temporanea. 

    Provare a configurare la dependency injection mi porterebbe via tempo che utilizzerei per andare avanti con lo sviluppo. 

  • Re: Delphimvc framework: cosa sono i Services?

    31/07/2024 - GrandfatherCoder ha scritto:


    Dici che è troppo esposto il Web Module? 

    Cosa si intende per “esposto”?
    Fatico a comprendere qual è la problematica.

    31/07/2024 - GrandfatherCoder ha scritto:


    Provare a configurare la dependency injection mi porterebbe via tempo che utilizzerei per andare avanti con lo sviluppo. 

    La DI fa parte dello sviluppo. Comunque è un pattern: ognuno sceglie il modo che preferisce.

    Dal punto di vista funzionale non cambia praticamente nulla: è una scelta quasi prettamente di architettura del codice.

  • Re: Delphimvc framework: cosa sono i Services?

    01/08/2024 - Alka ha scritto:

    31/07/2024 - GrandfatherCoder ha scritto:

    Dici che è troppo esposto il Web Module? 

    Cosa si intende per “esposto”?
    Fatico a comprendere qual è la problematica.

    Intendo dire se sia visibile ad eventuali attackers.

    Tuttavia,le impostazioni come username,password,etc,li fornisco al componente TFDConnection tramite le variabili ambientali.

    Siccome vedo il Web Module come il pannello di controllo dell'applicazione e per questo ho pensato di convogliare le impostazioni comuni.

    E tra le impostazioni comuni ci metto l'accesso ad un solo database tramite una sola connessione da parte delle Entities.

  • Re: Delphimvc framework: cosa sono i Services?

    01/08/2024 - GrandfatherCoder ha scritto:


    Intendo dire se sia visibile ad eventuali attackers.

    Quello che è visibile ad eventuali attackers sono gli endpoint esposti e il server in generale: il WebModule è solo un dettaglio implementativo.

    01/08/2024 - GrandfatherCoder ha scritto:


    E tra le impostazioni comuni ci metto l'accesso ad un solo database tramite una sola connessione da parte delle Entities.

    Attenzione che le applicazioni Web di questa tipologia sono tipicamente “multithreaded”: a ogni richiesta (azione), deve essere creata una nuova connessione al database.

  • Re: Delphimvc framework: cosa sono i Services?

    01/08/2024 - Alka ha scritto:


    Attenzione che le applicazioni Web di questa tipologia sono tipicamente “multithreaded”: a ogni richiesta (azione), deve essere creata una nuova connessione al database.

    OK.

    Solo nella versione Web mi permetto questa impostazione.

Devi accedere o registrarti per scrivere nel forum
14 risposte