際際滷

際際滷Share a Scribd company logo
Hardware, servizi, plugin e
       testabilit
        Un caso reale
Autore

Ricci Gian Maria
E-mail: ricci.gm@nablasoft.com
Blog: http://www.codewrecks.com
         http://blogs.ugidotnet.org/rgm
La situazione attuale
              Il software 竪 un unico programma
              winform che contiene tutta la logica nel
Monolitico    code behind di una form

              Laccesso allhardware 竪 effettuato
              direttamente nel code-behind, il software
Hardware
              pu嘆 quindi essere lanciato solamente in
              presenza dellhardware

              Non 竪 presente nessun test
              automatizzato, i test vengono fatti
Bad testing   lanciando il software ed utilizzandolo con
              lhardware connesso
Levoluzione richiesta
                 Il software deve poter essere eseguito
                 come servizio di windows, quindi senza
Servizi
                 interazione con lutente e senza ui

                  comunque necessario avere una
                 interfaccia per poter inviare alcuni
User interface
                 messaggi e verificare lo stato del servizio
Il desiderata
                Poter effettuare test funzionali di interfaccia senza avere
                lhardware connesso. Possibilit di simulare le varie
                condizioni dellhardware (faulting, disconnection, etc)
Hardware Free


                Essere se possibile indipendenti dallhardware, poter quindi
                riusare la UI e la logica in presenza di hardware differenti
                con cambiamenti minimali al codice
Plugin


                Poter decidere come deployare il software, o come servizio
                con UI disconnessa, o come eseguibile monolitico, oppure
                in modalit UI-Unattended
Versatilit



                Dialogare con un servizio o con la modalit UI-Unattended
                da macchine remote previa connessione di rete.
Remote UI
Come si 竪 proceduto

         As-Is        Hardware     WCF           Servizio     Plugin



Si 竪 proceduto prendendo un software minimale il cui scopo 竪
semplicemente ricevere dei codici letti da una serie di barcode scanner
industriali e scriverli su di una cartella

Lobiettivo era quello di creare una proof of concept che mostrasse i passi
necessari per rifatorizzare un progetto esistente dalla versione monolitica,
alla versione desiderata

Il risultato serve a dimostrare il processo necessario alla rifattorizzazione, sia
costituisce una reference implementation minimale su cui basare i successivi
software.
Lavorare con lhardware
               In molti casi 竪 possibile identificare un
               comportamento simile tra vari hardware, ad
               esempio dei lettori di codici a barre o lettori
               RFID sono in grado di essere interrogati per
               ricevere una stringa.
    Hardware




Lindividuazione di una interfaccia IGenericCodeReader
serve quindi ad astrarre il comportamento di un
generico hardware appartenente ad una determinata
categoria.
Questo 竪 il primo passo per poter essere indipendenti
dallhardware
Si comincia con lhardware
                Quando si ha a che fare con hardware, non
                esiste refactoring che non parta dal
                permettere di utilizzare il software con dei
                束simulatori損 di hardware

     Hardware




La necessit di operare e di effettuare test con
hardware connesso rende molto difficili le operazioni
di test e quindi ogni possibile refactoring.
La soluzione 竪 astrarre lhardware con una interfaccia
ed iniziare il lavoro con un simulatore
DEMO

Isolare lhardware tramite interfacce
Comunicazione
                  Dato che il codice che contiene la 束business
                  logic損 dovr essere eseguito in un servizio
                  la UI deve eseguire una comunicazione
                  Interprocesso

       Hardware




In .NET la soluzione migliore 竪 utilizzare una infrastruttura
WCF, il servizio esporr quindi un host WCF che pu嘆 essere
contattato da uno o pi湛 interfacce remote.
Tramite WCF si pu嘆 connettere una interfaccia al servizio di
un altro computer, semplificando la manutenzione
WCF Discovery
                      WCF contiene una funzionalit interessante
                      chiamata Discovery
Servizio
Hardware   UI         Grazie al discovery, un applicativo pu嘆
                      cercare se nella rete 竪 presente un Host wcf
                      che soddisfa una determinata interfaccia
Servizio   Servizio



    Il Discovery pu嘆 semplificare la gestione delle interfacce
    remote perch辿 permette di presentare allutente una lista di
    host attivi, dove ogni host 竪 una istanza del servizio in
    esecuzione
DEMO

Impostazione della comunicazione
    interprocesso con WCF
Flessibilit di deploy
                              Nel primo scenario il software viene deployato
                              come 束windows service損, se necessario si
                              accede con una UI remota
Servizio     UI


                              Nel secondo scenario si esegue il software con
                              una interfaccia minimale, usualmente con un
                              bottone Start/Stop e poco pi湛
Minimal-UI   UI


                  Nel terzo scenario il software viene eseguito in un singolo
                  tier, interfaccia di monitor e codice di business logic
                  vengono eseguiti nello stesso processo (come nella as-is)
All-in-on



La necessit di supportare questi tre scenari 竪 richiesta per
aumentare la flessibilit e non 束complicarsi la vita con i windows
service quando non serve損
DEMO

Abilitazione della modalit servizio,
     singletier e UI-Unattended
DEMO

WCF discovery
Plugin
                      Spesso vi 竪 la necessit di applicare logiche
                      simili a pi湛 hardware
Hardware   Logic      Gli hardware possono essere eguali o
                      eterogenei e condividere solo una certa
                      interfaccia (es. lettori di codici)
Hardware   Hardware
                      Una business logic deve quindi poter
                      caricare 束dinamicamente損 i plugin che va
                      ad utilizzare


    Questa struttura pu嘆 essere implementata con poco
    sforzo grazie a MEF, che si occupa del discovery e della
    istanziazione dei plugin
MEF
                      Mef permette di gestire con facilit la
                      complessit di 束individuare損 e 束caricare損 i
Hardware   Logic      plugin a run-time
                      Grazie a MEF e poche righe di codice il
                      nostro progetto 竪 in grado di scandire la
Hardware   Hardware
                      cartella principale alla ricerca di plugin.


     I concetti base sono Export ed Import, ovvero fornire e
     consumare parti di software
Plugin
Per lasciare il tutto molto semplice si utilizzano solamente le
funzionalit base di MEF introducendo una Interfaccia
chiamata IGenericCodeReaderFactory
Tale interfaccia ha lo scopo di creare le reali istanze dei plugin.
Grazie a MEF verranno automaticamente caricate tutte le classi
concrete disponibili che implementano questa interfaccia


                                     new
            MEF
                       Factory A            Plugin A
                                            Hardware   Plugin A



Software

                                     new
                       Factory B            Plugin B   Plugin B
DEMO

Versione finale con caricamento
dinamico dei plugin tramite MEF
Testing
                      La creazione di plugin di Testing permette
                      di poter verificare la business logic e le
Hardware   Logic      logiche di interfaccia senza un hardware
                      reale.
                      Un plugin di test permette quindi di
Hardware   Hardware
                      束simulare損 i comportamenti dellhardware
                      e verificarne le corrispettive risposte del
                      sistema


    Grazie a questo 竪 possibile non solo effettuare test
    manuali, ma anche creare UnitTest ripetibili e senza
    smell
     possibile sfruttare strumenti come i Coded-Ui-Test
Question time

 Iniziamo la discussione su quanto visto!!

More Related Content

Similar to Hardware e plugin (20)

Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
Mattia Milleri
Tesi di Laurea
Tesi di LaureaTesi di Laurea
Tesi di Laurea
Felice Pescatore
Progettazione e sviluppo di un software applicativo su un single board computer
Progettazione e sviluppo di un software applicativo su un single board computerProgettazione e sviluppo di un software applicativo su un single board computer
Progettazione e sviluppo di un software applicativo su un single board computer
Alessandro Mascherin
Classificazione software
Classificazione softwareClassificazione software
Classificazione software
Salvatore Cianciabella
Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...
Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...
Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...
Mattia De Bernardi
Niccol嘆 Becchi: Introduzione a GWT
Niccol嘆 Becchi: Introduzione a GWTNiccol嘆 Becchi: Introduzione a GWT
Niccol嘆 Becchi: Introduzione a GWT
firenze-gtug
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
Multi-Device Hybrid Apps con Visual Studio e Apache CordovaMulti-Device Hybrid Apps con Visual Studio e Apache Cordova
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
Andrea Dottor
Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3
Marco Loregian
Total Testing in DevOps
Total Testing in DevOpsTotal Testing in DevOps
Total Testing in DevOps
Gianni Bombelli
REALIZZAZIONE DI UN SOFTWARE DI COMUNICAZIONE MULTIPROTOCOLLO PER IL CONTROLL...
REALIZZAZIONE DI UN SOFTWARE DI COMUNICAZIONE MULTIPROTOCOLLO PER IL CONTROLL...REALIZZAZIONE DI UN SOFTWARE DI COMUNICAZIONE MULTIPROTOCOLLO PER IL CONTROLL...
REALIZZAZIONE DI UN SOFTWARE DI COMUNICAZIONE MULTIPROTOCOLLO PER IL CONTROLL...
Enrico Paluzzano
PALUZZANO PRELAUREA
PALUZZANO PRELAUREAPALUZZANO PRELAUREA
PALUZZANO PRELAUREA
Enrico Paluzzano
Windows Workflow Foundation 4
Windows Workflow Foundation 4Windows Workflow Foundation 4
Windows Workflow Foundation 4
Felice Pescatore
Sviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarinSviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarin
Fabio Cozzolino
Qualit del Software
Qualit del SoftwareQualit del Software
Qualit del Software
Yeser Rema
Designing with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDesigning with microservices - Daniele Mondello
Designing with microservices - Daniele Mondello
Daniele Mondello
Introduzione al java
Introduzione al javaIntroduzione al java
Introduzione al java
Giovanni Pace
Integrazione continua e Deploy automatizzato
Integrazione continua e Deploy automatizzatoIntegrazione continua e Deploy automatizzato
Integrazione continua e Deploy automatizzato
Gian Maria Ricci
Flash Platform su dispositivi mobili
Flash Platform su dispositivi mobiliFlash Platform su dispositivi mobili
Flash Platform su dispositivi mobili
luca mezzalira
Androidsdk appinventor
Androidsdk appinventorAndroidsdk appinventor
Androidsdk appinventor
fdizazzo
Progea - PowerHMI brochures Ita
Progea - PowerHMI brochures ItaProgea - PowerHMI brochures Ita
Progea - PowerHMI brochures Ita
PROGEA s.r.l.
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
Progetto e implementazione di una pipeline di sviluppo software con tecnologi...
Mattia Milleri
Progettazione e sviluppo di un software applicativo su un single board computer
Progettazione e sviluppo di un software applicativo su un single board computerProgettazione e sviluppo di un software applicativo su un single board computer
Progettazione e sviluppo di un software applicativo su un single board computer
Alessandro Mascherin
Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...
Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...
Sviluppo di un'applicazione ibrida su dispositivo mobile per l'interfacciamen...
Mattia De Bernardi
Niccol嘆 Becchi: Introduzione a GWT
Niccol嘆 Becchi: Introduzione a GWTNiccol嘆 Becchi: Introduzione a GWT
Niccol嘆 Becchi: Introduzione a GWT
firenze-gtug
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
Multi-Device Hybrid Apps con Visual Studio e Apache CordovaMulti-Device Hybrid Apps con Visual Studio e Apache Cordova
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
Andrea Dottor
Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3
Marco Loregian
Total Testing in DevOps
Total Testing in DevOpsTotal Testing in DevOps
Total Testing in DevOps
Gianni Bombelli
REALIZZAZIONE DI UN SOFTWARE DI COMUNICAZIONE MULTIPROTOCOLLO PER IL CONTROLL...
REALIZZAZIONE DI UN SOFTWARE DI COMUNICAZIONE MULTIPROTOCOLLO PER IL CONTROLL...REALIZZAZIONE DI UN SOFTWARE DI COMUNICAZIONE MULTIPROTOCOLLO PER IL CONTROLL...
REALIZZAZIONE DI UN SOFTWARE DI COMUNICAZIONE MULTIPROTOCOLLO PER IL CONTROLL...
Enrico Paluzzano
Windows Workflow Foundation 4
Windows Workflow Foundation 4Windows Workflow Foundation 4
Windows Workflow Foundation 4
Felice Pescatore
Sviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarinSviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarin
Fabio Cozzolino
Qualit del Software
Qualit del SoftwareQualit del Software
Qualit del Software
Yeser Rema
Designing with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDesigning with microservices - Daniele Mondello
Designing with microservices - Daniele Mondello
Daniele Mondello
Introduzione al java
Introduzione al javaIntroduzione al java
Introduzione al java
Giovanni Pace
Integrazione continua e Deploy automatizzato
Integrazione continua e Deploy automatizzatoIntegrazione continua e Deploy automatizzato
Integrazione continua e Deploy automatizzato
Gian Maria Ricci
Flash Platform su dispositivi mobili
Flash Platform su dispositivi mobiliFlash Platform su dispositivi mobili
Flash Platform su dispositivi mobili
luca mezzalira
Androidsdk appinventor
Androidsdk appinventorAndroidsdk appinventor
Androidsdk appinventor
fdizazzo
Progea - PowerHMI brochures Ita
Progea - PowerHMI brochures ItaProgea - PowerHMI brochures Ita
Progea - PowerHMI brochures Ita
PROGEA s.r.l.

More from Gian Maria Ricci (20)

Se non sviluppo codice non sto lavorando
Se non sviluppo codice non sto lavorandoSe non sviluppo codice non sto lavorando
Se non sviluppo codice non sto lavorando
Gian Maria Ricci
Gestire la qualit del codice con Visual Studio, SonarQube ed Azure Devops
Gestire la qualit del codice con Visual Studio, SonarQube ed Azure DevopsGestire la qualit del codice con Visual Studio, SonarQube ed Azure Devops
Gestire la qualit del codice con Visual Studio, SonarQube ed Azure Devops
Gian Maria Ricci
Migrare da un VCS centralizzato a Git
Migrare da un VCS centralizzato a GitMigrare da un VCS centralizzato a Git
Migrare da un VCS centralizzato a Git
Gian Maria Ricci
Real World Build + Release automation in Azure DevOps
Real World Build + Release automation in Azure DevOpsReal World Build + Release automation in Azure DevOps
Real World Build + Release automation in Azure DevOps
Gian Maria Ricci
Gestire i rilasci automatici con azure devops
Gestire i rilasci automatici con azure devopsGestire i rilasci automatici con azure devops
Gestire i rilasci automatici con azure devops
Gian Maria Ricci
Build and release in code with azure devops pipelines
Build and release in code with azure devops pipelinesBuild and release in code with azure devops pipelines
Build and release in code with azure devops pipelines
Gian Maria Ricci
Azure Pipeline in salsa yaml
Azure Pipeline in salsa yamlAzure Pipeline in salsa yaml
Azure Pipeline in salsa yaml
Gian Maria Ricci
Git gitflow pull requests in devops focused teams
Git gitflow pull requests in devops focused teamsGit gitflow pull requests in devops focused teams
Git gitflow pull requests in devops focused teams
Gian Maria Ricci
Distribute your code with NUget and build vNext
Distribute your code with NUget and build vNextDistribute your code with NUget and build vNext
Distribute your code with NUget and build vNext
Gian Maria Ricci
Manage your environment with DSC
Manage your environment with DSCManage your environment with DSC
Manage your environment with DSC
Gian Maria Ricci
Introduction to Application insights
Introduction to Application insightsIntroduction to Application insights
Introduction to Application insights
Gian Maria Ricci
Git branching model
Git branching modelGit branching model
Git branching model
Gian Maria Ricci
Deploy applications with TFS Build
Deploy applications with TFS BuildDeploy applications with TFS Build
Deploy applications with TFS Build
Gian Maria Ricci
TFS - Quale source control
TFS - Quale source controlTFS - Quale source control
TFS - Quale source control
Gian Maria Ricci
Branch model in Git
Branch model in GitBranch model in Git
Branch model in Git
Gian Maria Ricci
Introduction to Visual Studio Online
Introduction to Visual Studio OnlineIntroduction to Visual Studio Online
Introduction to Visual Studio Online
Gian Maria Ricci
Git si o Git No
Git si o Git NoGit si o Git No
Git si o Git No
Gian Maria Ricci
Testing
TestingTesting
Testing
Gian Maria Ricci
Come Organizzare il proprio Team Project
Come Organizzare il proprio Team ProjectCome Organizzare il proprio Team Project
Come Organizzare il proprio Team Project
Gian Maria Ricci
Git Perch竪 Usarlo
Git Perch竪 UsarloGit Perch竪 Usarlo
Git Perch竪 Usarlo
Gian Maria Ricci
Se non sviluppo codice non sto lavorando
Se non sviluppo codice non sto lavorandoSe non sviluppo codice non sto lavorando
Se non sviluppo codice non sto lavorando
Gian Maria Ricci
Gestire la qualit del codice con Visual Studio, SonarQube ed Azure Devops
Gestire la qualit del codice con Visual Studio, SonarQube ed Azure DevopsGestire la qualit del codice con Visual Studio, SonarQube ed Azure Devops
Gestire la qualit del codice con Visual Studio, SonarQube ed Azure Devops
Gian Maria Ricci
Migrare da un VCS centralizzato a Git
Migrare da un VCS centralizzato a GitMigrare da un VCS centralizzato a Git
Migrare da un VCS centralizzato a Git
Gian Maria Ricci
Real World Build + Release automation in Azure DevOps
Real World Build + Release automation in Azure DevOpsReal World Build + Release automation in Azure DevOps
Real World Build + Release automation in Azure DevOps
Gian Maria Ricci
Gestire i rilasci automatici con azure devops
Gestire i rilasci automatici con azure devopsGestire i rilasci automatici con azure devops
Gestire i rilasci automatici con azure devops
Gian Maria Ricci
Build and release in code with azure devops pipelines
Build and release in code with azure devops pipelinesBuild and release in code with azure devops pipelines
Build and release in code with azure devops pipelines
Gian Maria Ricci
Azure Pipeline in salsa yaml
Azure Pipeline in salsa yamlAzure Pipeline in salsa yaml
Azure Pipeline in salsa yaml
Gian Maria Ricci
Git gitflow pull requests in devops focused teams
Git gitflow pull requests in devops focused teamsGit gitflow pull requests in devops focused teams
Git gitflow pull requests in devops focused teams
Gian Maria Ricci
Distribute your code with NUget and build vNext
Distribute your code with NUget and build vNextDistribute your code with NUget and build vNext
Distribute your code with NUget and build vNext
Gian Maria Ricci
Manage your environment with DSC
Manage your environment with DSCManage your environment with DSC
Manage your environment with DSC
Gian Maria Ricci
Introduction to Application insights
Introduction to Application insightsIntroduction to Application insights
Introduction to Application insights
Gian Maria Ricci
Deploy applications with TFS Build
Deploy applications with TFS BuildDeploy applications with TFS Build
Deploy applications with TFS Build
Gian Maria Ricci
TFS - Quale source control
TFS - Quale source controlTFS - Quale source control
TFS - Quale source control
Gian Maria Ricci
Introduction to Visual Studio Online
Introduction to Visual Studio OnlineIntroduction to Visual Studio Online
Introduction to Visual Studio Online
Gian Maria Ricci
Come Organizzare il proprio Team Project
Come Organizzare il proprio Team ProjectCome Organizzare il proprio Team Project
Come Organizzare il proprio Team Project
Gian Maria Ricci

Hardware e plugin

  • 1. Hardware, servizi, plugin e testabilit Un caso reale
  • 2. Autore Ricci Gian Maria E-mail: ricci.gm@nablasoft.com Blog: http://www.codewrecks.com http://blogs.ugidotnet.org/rgm
  • 3. La situazione attuale Il software 竪 un unico programma winform che contiene tutta la logica nel Monolitico code behind di una form Laccesso allhardware 竪 effettuato direttamente nel code-behind, il software Hardware pu嘆 quindi essere lanciato solamente in presenza dellhardware Non 竪 presente nessun test automatizzato, i test vengono fatti Bad testing lanciando il software ed utilizzandolo con lhardware connesso
  • 4. Levoluzione richiesta Il software deve poter essere eseguito come servizio di windows, quindi senza Servizi interazione con lutente e senza ui comunque necessario avere una interfaccia per poter inviare alcuni User interface messaggi e verificare lo stato del servizio
  • 5. Il desiderata Poter effettuare test funzionali di interfaccia senza avere lhardware connesso. Possibilit di simulare le varie condizioni dellhardware (faulting, disconnection, etc) Hardware Free Essere se possibile indipendenti dallhardware, poter quindi riusare la UI e la logica in presenza di hardware differenti con cambiamenti minimali al codice Plugin Poter decidere come deployare il software, o come servizio con UI disconnessa, o come eseguibile monolitico, oppure in modalit UI-Unattended Versatilit Dialogare con un servizio o con la modalit UI-Unattended da macchine remote previa connessione di rete. Remote UI
  • 6. Come si 竪 proceduto As-Is Hardware WCF Servizio Plugin Si 竪 proceduto prendendo un software minimale il cui scopo 竪 semplicemente ricevere dei codici letti da una serie di barcode scanner industriali e scriverli su di una cartella Lobiettivo era quello di creare una proof of concept che mostrasse i passi necessari per rifatorizzare un progetto esistente dalla versione monolitica, alla versione desiderata Il risultato serve a dimostrare il processo necessario alla rifattorizzazione, sia costituisce una reference implementation minimale su cui basare i successivi software.
  • 7. Lavorare con lhardware In molti casi 竪 possibile identificare un comportamento simile tra vari hardware, ad esempio dei lettori di codici a barre o lettori RFID sono in grado di essere interrogati per ricevere una stringa. Hardware Lindividuazione di una interfaccia IGenericCodeReader serve quindi ad astrarre il comportamento di un generico hardware appartenente ad una determinata categoria. Questo 竪 il primo passo per poter essere indipendenti dallhardware
  • 8. Si comincia con lhardware Quando si ha a che fare con hardware, non esiste refactoring che non parta dal permettere di utilizzare il software con dei 束simulatori損 di hardware Hardware La necessit di operare e di effettuare test con hardware connesso rende molto difficili le operazioni di test e quindi ogni possibile refactoring. La soluzione 竪 astrarre lhardware con una interfaccia ed iniziare il lavoro con un simulatore
  • 10. Comunicazione Dato che il codice che contiene la 束business logic損 dovr essere eseguito in un servizio la UI deve eseguire una comunicazione Interprocesso Hardware In .NET la soluzione migliore 竪 utilizzare una infrastruttura WCF, il servizio esporr quindi un host WCF che pu嘆 essere contattato da uno o pi湛 interfacce remote. Tramite WCF si pu嘆 connettere una interfaccia al servizio di un altro computer, semplificando la manutenzione
  • 11. WCF Discovery WCF contiene una funzionalit interessante chiamata Discovery Servizio Hardware UI Grazie al discovery, un applicativo pu嘆 cercare se nella rete 竪 presente un Host wcf che soddisfa una determinata interfaccia Servizio Servizio Il Discovery pu嘆 semplificare la gestione delle interfacce remote perch辿 permette di presentare allutente una lista di host attivi, dove ogni host 竪 una istanza del servizio in esecuzione
  • 12. DEMO Impostazione della comunicazione interprocesso con WCF
  • 13. Flessibilit di deploy Nel primo scenario il software viene deployato come 束windows service損, se necessario si accede con una UI remota Servizio UI Nel secondo scenario si esegue il software con una interfaccia minimale, usualmente con un bottone Start/Stop e poco pi湛 Minimal-UI UI Nel terzo scenario il software viene eseguito in un singolo tier, interfaccia di monitor e codice di business logic vengono eseguiti nello stesso processo (come nella as-is) All-in-on La necessit di supportare questi tre scenari 竪 richiesta per aumentare la flessibilit e non 束complicarsi la vita con i windows service quando non serve損
  • 14. DEMO Abilitazione della modalit servizio, singletier e UI-Unattended
  • 16. Plugin Spesso vi 竪 la necessit di applicare logiche simili a pi湛 hardware Hardware Logic Gli hardware possono essere eguali o eterogenei e condividere solo una certa interfaccia (es. lettori di codici) Hardware Hardware Una business logic deve quindi poter caricare 束dinamicamente損 i plugin che va ad utilizzare Questa struttura pu嘆 essere implementata con poco sforzo grazie a MEF, che si occupa del discovery e della istanziazione dei plugin
  • 17. MEF Mef permette di gestire con facilit la complessit di 束individuare損 e 束caricare損 i Hardware Logic plugin a run-time Grazie a MEF e poche righe di codice il nostro progetto 竪 in grado di scandire la Hardware Hardware cartella principale alla ricerca di plugin. I concetti base sono Export ed Import, ovvero fornire e consumare parti di software
  • 18. Plugin Per lasciare il tutto molto semplice si utilizzano solamente le funzionalit base di MEF introducendo una Interfaccia chiamata IGenericCodeReaderFactory Tale interfaccia ha lo scopo di creare le reali istanze dei plugin. Grazie a MEF verranno automaticamente caricate tutte le classi concrete disponibili che implementano questa interfaccia new MEF Factory A Plugin A Hardware Plugin A Software new Factory B Plugin B Plugin B
  • 19. DEMO Versione finale con caricamento dinamico dei plugin tramite MEF
  • 20. Testing La creazione di plugin di Testing permette di poter verificare la business logic e le Hardware Logic logiche di interfaccia senza un hardware reale. Un plugin di test permette quindi di Hardware Hardware 束simulare損 i comportamenti dellhardware e verificarne le corrispettive risposte del sistema Grazie a questo 竪 possibile non solo effettuare test manuali, ma anche creare UnitTest ripetibili e senza smell possibile sfruttare strumenti come i Coded-Ui-Test
  • 21. Question time Iniziamo la discussione su quanto visto!!