Architettura di produzione in profondità
Hai costruito una piccola app Wisej.NET — ora impara a strutturarne una che un team possa mantenere e far crescere per anni. Questo approfondimento ti porta da un progetto di esercitazione a un'architettura di livello produttivo, con confini netti tra UI, dominio, servizi, dati e infrastruttura e una separazione chiara tra componenti lato server e widget lato client. Dodici moduli trattano la struttura del progetto e il ciclo di vita dell'applicazione, la composizione di interfacce responsive e riutilizzabili, il data binding e pipeline di salvataggio sicure, flussi modali e transazionali, attività in background e aggiornamenti in tempo reale, dependency injection e pattern testabili, interoperabilità con JavaScript, temi e localizzazione, e confini di sicurezza — per chiudere con rilascio, diagnostica, bilanciamento del carico e la consegna di un capstone. È rivolto a sviluppatori che rilasciano già app Wisej.NET e vogliono i pattern che le mantengono pulite sotto la pressione del mondo reale.
Passa da una piccola app di esercitazione a una struttura Wisej.NET manutenibile e pronta per la produzione — componenti lato server, widget lato client e confini di progetto puliti.
- Livello: Intermediate
- Durata: 12 ore
- Moduli: 12
Programma
Modulo 1: Architettura Wisej.NET di produzione e struttura del progetto
Modulo 1 di Architettura di produzione in profondità. Leggi la guida della lezione e la guida ai concetti applicati, guarda la videoguida sul refactoring verso la produzione, supera la verifica delle conoscenze e poi rifattorizza TicketOps Console in una struttura pronta per la produzione nel lab pratico.
- LetturaGuida della lezione · 12 min
Come Wisej.NET mappa i controlli .NET lato server sui widget lato browser — e perché questo ti permette di mantenere i controlli leggeri.
- LetturaGuida al lab / esame · 12 min
Approfondisci l'architettura di produzione: quando un confine ripaga il suo costo, collegare i servizi senza stato statico e un refactoring di TicketOps svolto passo per passo.
- Lezione videoRifattorizza TicketOps in una struttura di produzione · 8 min
Guarda una semplice app di ticket da junior diventare una soluzione pronta per la produzione — componenti lato server mappati sui widget, gestori di evento leggeri e logica spostata dietro ITicketService. Parte direttamente qui nel player.
Trascrizione della narrazione
Refactoring TicketOps assegnando responsabilità separate all'interfaccia e alle operazioni aziendali. L'obiettivo è una struttura in cui un altro sviluppatore possa trovare una regola, modificarne l'implementazione e verificare il risultato senza cercare tra i gestori di pulsanti.
Il gestore affollato combina query di database, convalida, decisioni sul flusso di lavoro e aggiornamenti dello schermo. Tali responsabilità cambiano per ragioni diverse, quindi tenerle insieme rende anche una piccola correzione più difficile da isolare e rivedere.
Crea cartelle che denominino le responsabilità previste, quindi usa quei nomi per decidere a chi appartiene il codice. Il vantaggio deriva da confini coerenti, non dallo spostamento dello stesso gestore strettamente accoppiato in un file con nome diverso.
Definire l'interfaccia del servizio ticket in base alle operazioni di cui lo schermo ha effettivamente bisogno. Il modulo può quindi dipendere da un contratto stabile mentre test o implementazioni successive di archiviazione forniscono modi diversi per soddisfarlo.
Implementa prima un servizio di ticket falso e sposta in esso le decisioni sul flusso di lavoro. Ciò consente di verificare l'interazione dello schermo con il contratto prima di introdurre l'accesso ai dati reali e i suoi ulteriori casi di fallimento.
Il gestore ora delega l'operazione, ne visualizza il risultato e gestisce gli errori. Leggilo come una descrizione dell'azione dell'utente; le regole aziendali dovrebbero essere comprensibili nel servizio piuttosto che nascoste tra gli aggiornamenti di controllo.
Esegui localmente e controlla sia la griglia popolata che lo stato aggiornato. I due risultati dovrebbero concordare: il servizio ha fornito i dati e l'interfaccia ora comunica all'utente che l'aggiornamento è stato completato.
Fornire all'utente un messaggio di errore comprensibile mantenendo l'eccezione reale nel registro. Ciò separa la spiegazione necessaria per continuare a lavorare dai dettagli diagnostici di cui gli sviluppatori hanno bisogno per indagare sulla causa.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto TicketOps di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce — confrontandolo anche con la nostra build di riferimento su GitHub.
- VerificaVerifica delle conoscenze — Modulo 1 · 12 min · Soglia di superamento 80%
- Laboratorio praticoLab — Refactoring verso l'architettura di produzione · 40 min
Obiettivo: Rifattorizza l'app TicketOps da junior in una struttura di soluzione pronta per la produzione: cartelle per Views, Controls, Services, Domain, Data, Infrastructure, Resources e Diagnostics; un ITicketService con un'implementazione fittizia TicketService; gestori di evento leggeri che chiamano il servizio; e una breve nota di architettura che spiega dove va il codice nuovo.
Modulo 2: Avvio, configurazione, stato di sessione e ciclo di vita dell'applicazione
Modulo 2 di Architettura di produzione in profondità. Leggi la guida della lezione e la guida ai concetti applicati, guarda la videoguida sul SessionContext, supera la verifica delle conoscenze e poi costruisci un SessionContext con ambito di sessione e una pagina di diagnostica nel lab pratico.
- LetturaGuida della lezione · 12 min
Stato dell'applicazione, della sessione, dell'utente, della scheda del browser e della richiesta — e perché una sessione somiglia più all'istanza di un'app desktop che a un account utente.
- LetturaGuida al lab / esame · 12 min
Approfondisci lo stato di sessione: un contesto con ambito di sessione collegato senza campi statici, la pipeline di avvio e configurazione e la trappola dei campi statici.
- Lezione videoCostruisci un SessionContext e una pagina di diagnostica · 8 min
Guarda lo stato per utente uscire dai campi statici ed entrare in un SessionContext con ambito di sessione, con una pagina di diagnostica che separa le impostazioni globali dai valori per sessione. Parte direttamente qui nel player.
Trascrizione della narrazione
Decidi come avviare l'applicazione Wisej.NET e dove appartiene il suo stato prima di aggiungere altri flussi di lavoro. Le scelte di configurazione e durata determinano se lo schermo di ciascun utente vede i dati corretti quando le sessioni e le schede cambiano.
Una sessione rappresenta un'interazione in corso, non semplicemente l'identità di una persona. Aggiornamenti, riconnessioni e schede multiple indicano che un utente può avere diversi contesti, quindi i record selezionati non devono essere archiviati automaticamente come stato a livello di utente.
Per ciascun valore, distinguere la proprietà a livello di applicazione, sessione, utente e scheda. Chiedere chi dovrebbe osservare un cambiamento e quando dovrebbe scomparire; quelle risposte guidano la vita in modo più affidabile della comodità di un campo globale.
Esaminare Default.json come parte della distribuzione, inclusi tema, timeout, limiti della sessione client, convalida e cultura. Queste impostazioni influenzano il comportamento in fase di esecuzione, quindi necessitano di valori deliberati e di revisione insieme al codice dell'applicazione.
I campi statici ordinari vengono condivisi tra le sessioni anche se Wisej.NET fornisce l'accesso sensibile alla sessione tramite l'applicazione. Non dedurre che il campo statico del ticket selezionato ottenga lo stesso isolamento; può esporre il valore di un'altra sessione.
Inserisci i valori di proprietà della sessione in un contesto di sessione o nell'archivio di sessione fornito da Wisej.NET. Ogni sessione ha quindi la propria istanza, rendendo visibile l'isolamento previsto nella progettazione anziché fare affidamento su convenzioni di denominazione.
Definire il contesto della sessione con un identificatore di sessione, un utente corrente e un ticket selezionato. Il raggruppamento di questi valori correlati rende chiaro quale contesto utilizza un modulo o un servizio quando gestisce un'operazione.
Passare il contesto nei moduli e nei servizi che lo necessitano. Il gestore di selezione del ticket scrive in quel contesto, quindi la sua dipendenza è visibile e la selezione appartiene alla sessione corrente anziché a una variabile globale condivisa.
Seleziona un ticket nell'applicazione in esecuzione e leggi lo stato specifico della sessione. Confermare che la selezione visualizzata provenga dal contesto corrente; questo è il risultato visibile della decisione di proprietà presa in precedenza.
Continua ad applicare la stessa disciplina in tutto TicketOps: schermate progettabili, nomi comprensibili, limiti del servizio e guasti visibili. La chiara proprietà statale integra tali pratiche rendendo il comportamento più facile da rivedere in più sessioni.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto TicketOps di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce — confrontandolo anche con la nostra build di riferimento su GitHub.
- VerificaVerifica delle conoscenze — Modulo 2 · 12 min · Soglia di superamento 80%
- Laboratorio praticoLab — SessionContext e audit dello stato statico · 40 min
Obiettivo: Un SessionContext con ambito di sessione per TicketOps Console: registrato con durata di sessione, iniettato in Form e servizi, che mostra ID di sessione / utente / tenant / tema / profilo client, più una pagina di diagnostica che separa le impostazioni globali dell'applicazione dai valori per sessione — e un audit dello stato statico applicato all'app esistente.
Modulo 3: Layout responsive, profili client e composizione di UI riutilizzabile
Modulo 3 di Architettura di produzione in profondità. Leggi la guida della lezione e la guida ai concetti applicati, guarda la videoguida sull'area di lavoro responsive, supera la verifica delle conoscenze e poi costruisci un'area di lavoro ticket responsive con i Client Profile nel lab pratico.
- LetturaGuida della lezione · 12 min
Scegli i motori di layout in base all'intento — Dock/Anchor per i pannelli desktop, Table per le griglie dei form, Flow per il contenuto che va a capo, Flex per le aree proporzionali.
- LetturaGuida al lab / esame · 12 min
Approfondisci la UI responsive: annidare i motori di layout, reagire ai cambi di Client Profile e costruire UserControl riutilizzabili per la Ticket Workspace.
- Lezione videoCostruisci un'area di lavoro ticket responsive · 8 min
Guarda un'unica Ticket Workspace adattarsi ai profili desktop, tablet e telefono usando motori di layout, Client Profile e UserControl riutilizzabili. Parte direttamente qui nel player.
Trascrizione della narrazione
Adatta l'area di lavoro ticket al desktop, al tablet e al telefono preservando l'attività in ogni dimensione. Il layout dovrebbe cambiare il modo in cui le informazioni sono organizzate senza far perdere agli utenti il record o l'azione su cui stanno lavorando.
Inizia con ciò che gli operatori devono confrontare, leggere e su cui agire insieme. I pannelli sovrapposti non sono semplicemente disordinati; possono nascondere il messaggio o la registrazione che dà significato a un'azione.
Scegli i contenitori in base al loro lavoro: collegamento dei bordi, allineamento tabellare, elementi scorrevoli o distribuzione flessibile. Far corrispondere il meccanismo di layout alla relazione prevista è più affidabile rispetto al posizionamento manuale di ogni controllo per ciascuna larghezza.
Raggruppare sezioni di interfaccia ripetute in UserControls che rimangono utilizzabili nella finestra di progettazione. Una barra di ricerca condivisa offre a più schermi un layout e un comportamento gestibili, mentre l'area di lavoro compone quelle parti in un'attività più ampia.
Utilizzare ClientProfiles.json per descrivere i profili che determinano le modifiche alle proprietà lato server. Un profilo è una regola di adattamento deliberata, quindi mantieni il suo effetto comprensibile anziché spargere i controlli di larghezza tra gestori di eventi non correlati.
Applica il profilo attivo in un gestore: nascondi la navigazione, sposta l'attività in una scheda ed esponi un'azione indietro dove necessario. La centralizzazione di queste modifiche coordinate rende ogni modalità di layout più semplice da comprendere e verificare.
Prova lo stesso flusso di lavoro per ciascuna larghezza. Il desktop mostra il contesto completo, il tablet sposta l'attività in una scheda e il telefono si concentra su un'attività; verificare che gli utenti possano ancora raggiungere le informazioni e le azioni di cui hanno bisogno.
Fornisci insieme l'area di lavoro, i profili, le note del profilo e la barra di ricerca riutilizzabile. Spiega cosa cambia ogni profilo e perché, in modo che lo sviluppatore successivo possa preservare il flusso di lavoro quando aggiunge un altro pannello o schermata.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto TicketOps di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce — confrontandolo anche con la nostra build di riferimento su GitHub.
- VerificaVerifica delle conoscenze — Modulo 3 · 12 min · Soglia di superamento 80%
- Laboratorio praticoLab — Area di lavoro ticket responsive · 40 min
Obiettivo: Uno UserControl TicketWorkspace responsive per TicketOps Console: tutti i pannelli insieme su desktop, il pannello attività compresso in un tab su tablet e una singola vista orientata all'attività con un pulsante Indietro su telefono — guidato da ClientProfiles.json / ResponsiveProfileChanged, con un controllo SearchBar riutilizzabile.
Modulo 4: Data binding, DataGridView e flussi orientati ai dati
Modulo 4 di Architettura di produzione in profondità. Leggi la guida della lezione e la guida ai concetti applicati, guarda la videoguida sul data binding, supera la verifica delle conoscenze e poi costruisci la griglia Work Order e il master-detail nel lab pratico.
- LetturaGuida della lezione · 12 min
Usa BindingSource, BindingList<T>, INotifyPropertyChanged, la formattazione della griglia, i filtri, i flussi master-detail e i pattern di salvataggio/annullamento per le schermate di dati di business.
- LetturaGuida al lab / esame · 12 min
Approfondisci il data binding: un modello Work Order osservabile, il collegamento BindingSource-griglia, la formattazione delle colonne, i filtri, la sincronizzazione master-detail e un Save/Cancel pulito.
- Lezione videoCostruisci una griglia Work Order in data binding · 8 min
Una videoguida sul data binding che puoi eseguire direttamente qui nel player.
Trascrizione della narrazione
Collega l'elenco e l'editor TicketOps in modo che gli utenti possano controllare, modificare e salvare lo stesso record aziendale in modo coerente. L'associazione riduce la sincronizzazione manuale, ma il flusso di lavoro deve comunque definire la selezione, le modifiche non salvate e salvare i risultati.
Un'associazione collega una proprietà del modello a una proprietà di controllo, mentre BindingSource coordina l'elemento corrente. Utilizza la fonte condivisa per l'elenco e i dettagli in modo che una modifica della selezione aggiorni costantemente il contesto dell'editor.
Le notifiche di modifica della proprietà comunicano ai controlli associati quando il valore di un ordine di lavoro cambia. Un elenco in grado di riconoscere l'associazione segnala separatamente le modifiche alla raccolta; insieme, queste notifiche impediscono che la griglia dipenda dagli aggiornamenti manuali dopo ogni modifica o aggiunta.
Collega la rete a uno BindingSource e collega quella sorgente all'elenco. Scegli deliberatamente le colonne. Mantieni la formattazione di visualizzazione nell'interfaccia utente, separata dai dati e dalle regole aziendali.
Utilizza il filtro di ricerca e stato per restringere l'elenco, quindi lascia che la riga selezionata determini il record di dettaglio. Mantenere esplicita questa relazione aiuta gli utenti a capire esattamente quale ordine di lavoro influenzerà la loro prossima modifica.
Tieni traccia se l'editor ha modifiche non salvate. Cancel dovrebbe ripristinare i valori precedenti, mentre Save tenta di confermarli; se fallisce, segnala l'errore invece di lasciare che la visualizzazione associata implichi che i dati siano stati persistenti.
Fornire il modello, la configurazione dell'associazione, i gestori di formattazione, l'editor e le note di commit o annullamento. Il trasferimento dovrebbe spiegare come un record selezionato passa dalla visualizzazione alla modifica e quindi allo stato salvato o ripristinato.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto TicketOps di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce — confrontandolo anche con la nostra build di riferimento su GitHub.
- VerificaVerifica delle conoscenze — Modulo 4 · 12 min · Soglia di superamento 80%
- Laboratorio praticoLab — Griglia Work Order e master-detail · 40 min
Obiettivo: Crea una griglia Work Order con ricerca, filtro per stato, editor master-detail, tracciamento delle modifiche non salvate, Save/Cancel e colonne formattate per priorità, utente assegnato, data di scadenza e costo. Deliverable: modello o view model WorkOrder osservabile; configurazione del BindingSource; gestori di formattazione della griglia; editor master-detail; note sul comportamento di commit/annullamento.
Modulo 5: Validazione, UX degli errori e pipeline di salvataggio sicure
Modulo 5 di Architettura di produzione in profondità. Leggi la guida della lezione e la guida ai concetti applicati, guarda la videoguida sulla validazione, supera la verifica delle conoscenze e poi costruisci la validazione dei Work Order e la pipeline di salvataggio nel lab pratico.
- LetturaGuida della lezione · 12 min
Progetta la validazione sia come esperienza utente sia come meccanismo di sicurezza del business, usando una validazione centralizzata, la visualizzazione degli errori a livello di campo, i controlli lato server e pipeline di salvataggio coerenti.
- LetturaGuida al lab / esame · 12 min
Approfondisci la validazione: regole a livelli, un comando di salvataggio riutilizzabile, errori a livello di campo e di riepilogo e una pipeline di salvataggio sicura in cui il vero controllo è il server.
- Lezione videoAggiungi la validazione e una pipeline di salvataggio sicura · 8 min
Una videoguida sulla validazione che puoi eseguire direttamente qui nel player.
Trascrizione della narrazione
Fai in modo che l'editor dell'ordine di lavoro spieghi l'input non valido prima di tentare un salvataggio non sicuro. La pipeline di convalida collega il feedback sul campo alle regole aziendali e alla persistenza, in modo che l'utente sappia cosa deve cambiare e se qualcosa è stato salvato.
Distinguere controlli dell'interfaccia, validità aziendale, vincoli di persistenza e autorizzazione. Ciascuno protegge un confine diverso; disabilitare il salvataggio può guidare gli utenti, ma il servizio deve comunque rifiutare una richiesta che viola le sue regole o autorizzazioni.
Posiziona ogni errore vicino al campo che richiede attenzione e raccogli i problemi in un riepilogo. Utilizzare un linguaggio che spieghi la correzione, in modo che gli utenti possano individuare il problema senza comprendere l'eccezione sottostante o la regola del database.
Raccogli e convalida l'input prima di creare il comando. Controlla le regole aziendali e l'autorizzazione prima di salvare. Solo dopo un salvataggio riuscito l'applicazione dovrebbe aggiornare lo schermo e registrare il risultato.
Interrompere anticipatamente quando la convalida fallisce, prima che inizi la persistenza. Se l'operazione di archiviazione stessa fallisce, mantieni i dettagli diagnostici reali nel registro e spiega chiaramente il salvataggio non riuscito invece di presentare all'utente un errore interno.
Applica la pipeline ai campi obbligatori, alle date di scadenza, ai limiti di costo, alle transizioni di stato e alle restrizioni di ruolo. Questi casi si estendono su livelli diversi, il che aiuta a verificare che l'editor faccia molto di più che verificare se una casella di testo è vuota.
Attiva un salvataggio fallito e successivamente controlla l'editor. Le modifiche dell'utente dovrebbero rimanere disponibili, il messaggio dovrebbe spiegare il problema e i dettagli interni dovrebbero apparire solo nel registro in modo che il ripristino non richieda la ribattitura del lavoro.
Una buona convalida protegge i dati aiutando le persone a completare il proprio lavoro. Preserva il contesto, spiega le correzioni e distingue un input rifiutato da un salvataggio non riuscito in modo che l'azione successiva sia chiara.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto TicketOps di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce — confrontandolo anche con la nostra build di riferimento su GitHub.
- VerificaVerifica delle conoscenze — Modulo 5 · 12 min · Soglia di superamento 80%
- Laboratorio praticoLab — Validazione dei Work Order e pipeline di salvataggio · 40 min
Obiettivo: Aggiungi la validazione all'editor dei Work Order. Applica i campi obbligatori, le regole sulla data di scadenza, l'intervallo di costo, le transizioni di stato valide e le restrizioni basate sul ruolo. Mostra gli errori a livello di campo e un pannello di riepilogo. Deliverable: regole di validazione o validazione del modello; oggetto comando di salvataggio; pannello di riepilogo degli errori; metodo della pipeline di salvataggio sicura; casi di test della validazione.
Modulo 6: Flussi modali, oggetti risultato dei dialoghi e UI transazionale
Modulo 6 di Architettura di produzione in profondità. Leggi la guida della lezione e la guida ai concetti applicati, guarda la videoguida sulla finestra di approvazione, supera la verifica delle conoscenze e poi costruisci la finestra di approvazione e il risultato tipizzato nel lab pratico.
- LetturaGuida della lezione · 12 min
Usa form modali e flussi con finestre di dialogo per le azioni di business complesse come approvazioni, escalation, assegnazioni, conferme e transazioni in più passi.
- LetturaGuida al lab / esame · 12 min
Approfondisci i flussi modali: oggetti risultato tipizzati per i dialoghi, conferma prima del commit e un'azione di business in più passi trattata come un'unica transazione.
- Lezione videoCostruisci un flusso con finestra di approvazione · 8 min
Una videoguida sulla finestra di approvazione che puoi eseguire direttamente qui nel player.
Trascrizione della narrazione
Utilizza una finestra di dialogo di approvazione per rendere esplicita la decisione dell'utente prima di modificare lo stato aziendale. Lo schermo raccoglie le intenzioni, restituisce un risultato strutturato e fornisce al servizio un punto chiaro in cui può iniziare l'esecuzione.
L'apertura di una modale dovrebbe segnare un vero e proprio confine decisionale nel flusso di lavoro. Gli utenti devono capire cosa stanno confermando e cosa significa la cancellazione prima che l'applicazione esegua l'azione consequenziale.
Mantieni il dialogo incentrato sull'approvazione o sul rifiuto, con commenti e conferme o cancellazioni esplicite. Una singola decisione rende il risultato più facile da convalidare e impedisce che modifiche non correlate diventino effetti collaterali nascosti.
Attendere la finestra di dialogo e leggere il risultato dell'approvazione digitata invece di ispezionare successivamente le proprietà del controllo non correlate. Il risultato porta la decisione come un contratto, mantenendo il chiamante indipendente da come il dialogo dispone i suoi campi.
Solo un risultato confermato dovrebbe attivare la transazione del servizio. Mantenere l'esecuzione al di fuori del dialogo significa che le stesse regole di approvazione rimangono nell'operazione aziendale anziché dipendere da una particolare finestra aperta.
Richiedi commenti quando l'utente rifiuta, perché il motivo è parte di quella decisione. Testare sia il pulsante Annulla che quello di chiusura: nessuno dei due dovrebbe emettere il comando di servizio o modificare il record aziendale.
Fornisci la finestra di dialogo, il risultato digitato, il comando di servizio, il diagramma del flusso di lavoro e i casi di test. Mostra conferma, rifiuto con commenti e annullamento in modo che il trasferimento descriva sia l'azione che i percorsi che deliberatamente non apportano modifiche.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto TicketOps di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce — confrontandolo anche con la nostra build di riferimento su GitHub.
- VerificaVerifica delle conoscenze — Modulo 6 · 12 min · Soglia di superamento 80%
- Laboratorio praticoLab — Finestra di approvazione e risultato tipizzato · 40 min
Obiettivo: Costruisci una finestra di approvazione che accetta o rifiuta un ordine di lavoro selezionato. Deve restituire un oggetto risultato tipizzato, validare i commenti obbligatori in caso di rifiuto e chiamare il servizio di approvazione solo dopo la conferma. Deliverable: form ApprovalDialog; classe ApprovalDialogResult; metodo di ApprovalService; casi di test in stile unit test per la gestione del risultato; diagramma del flusso.
Modulo 7: Attività in background, aggiornamenti in tempo reale e sincronizzazione
Modulo 7 di Architettura di produzione in profondità. Leggi la guida della lezione e la guida ai concetti applicati, guarda la videoguida sulle attività in background, supera la verifica delle conoscenze e poi costruisci l'importazione CSV in background nel lab pratico.
- LetturaGuida della lezione · 12 min
Usa le attività in background e il push dal server in tempo reale per eseguire lavori di lunga durata, aggiornare la UI in modo sicuro, supportare l'annullamento ed evitare di bloccare l'interfaccia utente.
- LetturaGuida al lab / esame · 12 min
Approfondisci l’elaborazione in background: eseguire fuori dal thread della UI, riportare gli aggiornamenti in modo sicuro, l'annullamento e la segnalazione degli errori riga per riga nell'importazione CSV.
- Lezione videoEsegui un'importazione CSV in background · 8 min
Una videoguida sulle attività in background che puoi eseguire direttamente qui nel player.
Trascrizione della narrazione
Importa valori separati da virgole in background mantenendo lo schermo reattivo. Gli utenti dovrebbero essere in grado di vedere i progressi, richiedere l'annullamento e comprendere il rapporto finale senza chiedersi se l'applicazione ha smesso di rispondere.
Una lunga importazione all'interno del gestore dei clic mantiene la sessione occupata con quel lavoro. Spostare l'operazione fuori dall'interazione immediata consente alla schermata di rimanere utile mentre l'importazione elabora le relative righe.
Avvia l'operazione in background con Application.StartTask, quindi torna al contesto della sessione corretta prima di accedere ai controlli. RunInContext stabilisce quel limite, quindi il lavoro in esecuzione altrove non aggiorna i controlli come se appartenesse già al contesto dell'interfaccia.
Pubblica i progressi raggiunti traguardi significativi e utilizza Application.Update per fornire tali modifiche al browser. Registra singolarmente le righe non valide in modo che un record errato possa essere visualizzato nel report senza interrompere inutilmente l'intera importazione.
Consenti a Cancel di richiedere l'annullamento tramite il token di annullamento mentre l'interfaccia rimane disponibile. Il lavoratore deve osservare tale richiesta nei punti sicuri; la pressione del pulsante dovrebbe portare a un risultato controllato, non a un'interruzione inspiegabile.
Esegui un'altra importazione fino al completamento e confronta i risultati di successo, annullamento ed errore. Ogni percorso dovrebbe lasciare i controlli in uno stato coerente con un report utile, in modo che l'utente possa comprendere il risultato e iniziare un'altra operazione.
Tratta il lancio, l'avanzamento, l'annullamento e il reporting come il flusso di lavoro di un unico utente. L'implementazione in background ha esito positivo quando l'utente rimane informato e mantiene il controllo durante tutta l'operazione, non solo al termine dell'importazione.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto TicketOps di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce — confrontandolo anche con la nostra build di riferimento su GitHub.
- VerificaVerifica delle conoscenze — Modulo 7 · 12 min · Soglia di superamento 80%
- Laboratorio praticoLab — Importazione CSV in background · 40 min
Obiettivo: Implementa una simulazione di importazione CSV che gira in background, aggiorna una barra di avanzamento e un pannello di log, supporta l'annullamento e segnala gli errori riga per riga senza bloccare la UI. Deliverable: ImportService; avvio dell'attività in background; UI di avanzamento; gestione dell'annullamento; note sulla thread safety.
Modulo 8: Servizi, dependency injection e pattern di UI testabili
Modulo 8 di Architettura di produzione in profondità. Leggi la guida della lezione e la guida ai concetti applicati, guarda la videoguida sulla dependency injection, supera la verifica delle conoscenze e poi inietta i servizi nella UI nel lab pratico.
- LetturaGuida della lezione · 12 min
Usa la registrazione dei servizi di Wisej.NET, i servizi con ambito di sessione, la property injection, la constructor injection per i servizi e semplici pattern presenter / servizio applicativo.
- LetturaGuida al lab / esame · 12 min
Approfondisci servizi e DI: interfacce pulite con profili fittizi e di produzione, la scelta della durata dei servizi e un presenter che rende testabile una schermata.
- Lezione videoInietta servizi per una UI testabile · 8 min
Una videoguida sulla dependency injection che puoi eseguire direttamente qui nel player.
Trascrizione della narrazione
Consenti agli schermi di dichiarare i servizi di cui hanno bisogno tramite l'inserimento delle dipendenze. Ciò separa il loro lavoro dalle decisioni di costruzione, consentendo alla stessa interfaccia di utilizzare un'implementazione dimostrativa ora e un'implementazione di produzione in seguito.
Definisci le interfacce per le funzionalità utilizzate dallo schermo, come ticket, utenti, autorizzazioni, notifiche e controllo. Questi contratti dovrebbero descrivere operazioni utili piuttosto che esporre le classi interne o le scelte di archiviazione dietro ciascun servizio.
Registra i servizi falsi in Application.Services e scegli deliberatamente la loro durata. L'attributo injection fornisce quindi le dipendenze della pagina, permettendoti di esercitare il contratto di servizio prima di connettere l'infrastruttura reale.
Trasferisci le decisioni di coordinamento dello schermo in un presentatore, lasciando i controlli responsabili dell'interazione e della visualizzazione. Le query del database, le decisioni sulle autorizzazioni e le regole tra schermi diventano quindi più facili da ispezionare senza navigare nell'albero di controllo visivo.
Confronta la durata condivisa, di sessione, di thread e transitoria con ciò che memorizza il servizio. Tutto ciò che è specifico dell'utente richiede l'ambito della sessione appropriato; una comoda registrazione condivisa non deve trasformare il contesto di un utente nella dipendenza di un altro utente.
Sostituisci la registrazione falsa con un'implementazione di produzione che soddisfi la stessa interfaccia. Lo schermo dovrebbe continuare a richiamare le stesse operazioni, dimostrando che i cambiamenti infrastrutturali non richiedono la riscrittura della logica di interazione.
È più facile ragionare sulle dipendenze quando vengono dichiarate, sostituibili e con ambito corretto. Un revisore dovrebbe essere in grado di vedere di cosa ha bisogno uno schermo e testare tali interazioni senza costruire l'intero ambiente di produzione.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto TicketOps di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce — confrontandolo anche con la nostra build di riferimento su GitHub.
- VerificaVerifica delle conoscenze — Modulo 8 · 12 min · Soglia di superamento 80%
- Laboratorio praticoLab — Inietta servizi nella UI · 40 min
Obiettivo: Rifattorizza l'applicazione per usare servizi iniettati per ticket, utenti, permessi, notifiche e log di audit. Aggiungi un profilo di registrazione dei servizi fittizi e uno di produzione. Deliverable: metodo di registrazione dei servizi; cinque interfacce con implementazioni fittizie; MainPage/Form con iniezione; presenter o servizio di workflow per una schermata; tabella delle durate dei servizi.
Modulo 9: Integrazione JavaScript, interop con Widget e miglioramenti lato client
Modulo 9 di Architettura di produzione in profondità. Leggi la guida della lezione e la guida ai concetti applicati, guarda la videoguida sull'interop JavaScript, supera la verifica delle conoscenze e poi costruisci le scorciatoie da tastiera e l'interop con gli appunti nel lab pratico.
- LetturaGuida della lezione · 12 min
Usa JavaScript in modo sicuro dove aggiunge valore: scorciatoie, comportamento dei widget, librerie esterne, API del browser e callback server/client, senza trasformare l'app in una SPA fragile.
- LetturaGuida al lab / esame · 12 min
Approfondisci l'interop JavaScript: scorciatoie da tastiera, il giro completo della callback dal client al server e una nota di sicurezza per ogni punto di interop.
- Lezione videoAggiungi un'interop JavaScript sicura · 8 min
Una videoguida sull'interop JavaScript che puoi eseguire direttamente qui nel player.
Trascrizione della narrazione
Aggiungi una scorciatoia da tastiera e un assistente per gli appunti come miglioramenti mirati del browser. Gli esempi mostrano come l'interazione locale può diventare più veloce mentre il server continua a controllare il contenuto del collegamento e registra l'operazione.
Utilizzare JavaScript per il comportamento lato browser come collegamenti, interazioni con widget e interfacce di programmazione del browser. Dagli un miglioramento specifico mantenendo le decisioni aziendali nell'applicazione lato server dove rimangono applicabili.
Conserva lo script in una fonte denominata e gestibile e allegalo solo dopo che il widget esiste. Una risorsa incorporata o JavaScriptSource rende il comportamento più facile da individuare, mentre la corretta tempistica del ciclo di vita gli fornisce un obiettivo valido.
Gestisci Control K nel browser per focalizzare immediatamente la ricerca globale. Poiché questa azione cambia solo il focus, non è necessario un viaggio di andata e ritorno sul server prima che l'utente possa iniziare a immettere una query.
Crea il collegamento sicuro sul server, quindi richiama il comportamento degli appunti tramite Application.Eval e registra l'azione. Il browser esegue l'interazione con gli appunti locali mentre l'applicazione mantiene il controllo di ciò che viene condiviso.
Documenta quali dati vanno a JavaScript, quale risultato ritorna e quali decisioni rimangono sul server. Questo limite rende il miglioramento più facile da rivedere e impedisce alla comodità del browser di acquisire silenziosamente autorità aziendale.
Mantieni ogni script abbastanza piccolo da rendere evidenti il suo scopo e i suoi confini. Il comportamento mirato del browser è più facile da mantenere quando integra il flusso di lavoro Wisej.NET e non diventa una sede alternativa per le regole aziendali.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto TicketOps di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce — confrontandolo anche con la nostra build di riferimento su GitHub.
- VerificaVerifica delle conoscenze — Modulo 9 · 12 min · Soglia di superamento 80%
- Laboratorio praticoLab — Scorciatoie da tastiera e interop con gli appunti · 40 min
Obiettivo: Aggiungi scorciatoie da tastiera lato client e un helper per gli appunti del browser. Usa JavaScript per intercettare Ctrl+K e dare il focus alla casella di ricerca globale, e aggiungi un'azione di copia negli appunti confermata dal server per il link del ticket selezionato. Deliverable: script incorporato o JavaScriptSource; metodo C# che invoca il comportamento lato client; gestore della callback sul server; nota di sicurezza per ogni punto di interop.
Modulo 10: Temi, risorse, localizzazione e modernizzazione della UI
Modulo 10 di Architettura di produzione in profondità. Leggi la guida della lezione e la guida ai concetti applicati, guarda la videoguida sui temi, supera la verifica delle conoscenze e poi costruisci una dashboard con tema e localizzata nel lab pratico.
- LetturaGuida della lezione · 12 min
Modernizza le applicazioni Wisej.NET usando temi, CSSStyle, risorse, icone, il cambio di tema a runtime, la localizzazione e regole di coerenza visiva.
- LetturaGuida al lab / esame · 12 min
Approfondisci i temi: il cambio chiaro/scuro a runtime, chip di stato riutilizzabili con CSSStyle, la gestione delle risorse e una localizzazione consapevole della cultura.
- Lezione videoApplica un tema e localizza la dashboard · 8 min
Una videoguida sui temi che puoi eseguire direttamente qui nel player.
Trascrizione della narrazione
Modernizza la dashboard attraverso regole visive condivise e contenuti sensibili alla cultura. Un tema coerente, una visualizzazione dello stato riutilizzabile e una formattazione localizzata aiutano gli utenti a riconoscere lo stesso flusso di lavoro anche quando la lingua e lo spazio disponibile cambiano.
Inserisci nel tema ampie scelte di aspetto prima di aggiungere eccezioni specifiche del controllo. Le regole centrali consentono a un aggiustamento visivo di raggiungere l'intera applicazione, mentre le sostituzioni locali sparse rendono più difficile l'applicazione coerente della stessa modifica.
Crea un chip di stato UserControl per possederne testo, colore e spaziatura. Il riutilizzo di quel componente impedisce agli schermi di inventare significati visivi diversi per lo stesso stato e offre ai futuri aggiustamenti un posto in cui vivere.
Archivia le etichette rivolte agli utenti nelle risorse e formatta date e denaro in base alla cultura selezionata. La traduzione e la formattazione risolvono problemi diversi, quindi il cambiamento della lingua deve anche produrre valori che gli utenti possano interpretare correttamente.
Cambia la cultura nella dashboard effettiva e controlla sia l'adattamento del testo che i valori formattati. Le etichette tedesche più lunghe possono esporre ipotesi di layout, mentre le date e la valuta modificate rivelano se la formattazione segue la cultura selezionata piuttosto che il testo codificato.
Esamina insieme la spaziatura, la gerarchia, il contrasto, le icone, i messaggi di stato e le eccezioni del tema. Questi controlli collegano la coerenza visiva alla lettura e all'azione pratica, aiutando a identificare uno schermo attraente che nasconde comunque informazioni importanti.
Una dashboard raffinata mantiene il suo significato su tutti gli schermi e le culture. I componenti e le risorse condivisi rendono la coerenza mantenibile, mentre il test di layout tradotti reali conferma che il design supporta ancora il compito dell'utente.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto TicketOps di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce — confrontandolo anche con la nostra build di riferimento su GitHub.
- VerificaVerifica delle conoscenze — Modulo 10 · 12 min · Soglia di superamento 80%
- Laboratorio praticoLab — Dashboard con tema e localizzata · 40 min
Obiettivo: Crea una dashboard operativa curata con un selettore di tema chiaro/scuro, chip di stato coerenti, etichette localizzate per almeno due culture e formattazione di date e valute in base alla cultura. Deliverable: UI per il cambio di tema; UserControl per i chip di stato; file di risorse o note sulla localizzazione; checklist di modernizzazione della UI applicata a due schermate.
Modulo 11: Sicurezza, autenticazione, autorizzazione e confini sicuri del server
Modulo 11 di Architettura di produzione in profondità. Leggi la guida della lezione e la guida ai concetti applicati, guarda la videoguida sulla sicurezza, supera la verifica delle conoscenze e poi costruisci autenticazione, autorizzazione e audit nel lab pratico.
- LetturaGuida della lezione · 12 min
Costruisci applicazioni Wisej.NET sicure mantenendo la fiducia sul server, sanificando i percorsi di visualizzazione pericolosi, gestendo l'autenticazione, applicando l'autorizzazione nei servizi e documentando le impostazioni di sicurezza del rilascio.
- LetturaGuida al lab / esame · 12 min
Approfondisci la sicurezza: autorizzazione applicata dal server, perché un pulsante disabilitato non è un controllo di sicurezza, la gestione sicura dell'HTML e il log di audit.
- Lezione videoAggiungi autenticazione e autorizzazione · 8 min
Una videoguida sulla sicurezza che puoi eseguire direttamente qui nel player.
Trascrizione della narrazione
Applicare azioni sensibili al servizio che le esegue. Questo modulo utilizza l'interfaccia per guidare gli utenti legittimi dimostrando che il server rifiuta le richieste non autorizzate anche quando i controlli dello schermo vengono manipolati.
Stabilire l'identità della sessione prima di consentire l'avvio di flussi di lavoro sensibili. L'autenticazione fornisce la risposta attendibile a chi sta agendo, che i successivi controlli di autorizzazione utilizzano per decidere se quella persona può eseguire un'operazione.
Autorizzare al limite dell'esecuzione e verificare sia il successo che il rifiuto. Un registro dei tentativi respinti è importante insieme alle azioni completate, perché spiega perché una richiesta non ha apportato modifiche e supporta l'indagine sull'uso improprio.
Forza il pulsante in uno stato abilitato e prova l'azione limitata. Il servizio deve comunque negarlo, dimostrando che un'impostazione utile dell'interfaccia non è il meccanismo che protegge l'operazione sottostante.
Codifica il testo fornito dall'utente prima di posizionarlo su superfici in grado di interpretare il markup. Esaminare deliberatamente ogni percorso AllowHtml in modo che il contenuto inteso come dati non possa diventare inaspettatamente una struttura di pagina eseguibile o attiva.
Controlla le azioni importanti e controlla le impostazioni relative alla sessione, ai cookie, al caricamento, alla registrazione e alla politica di sicurezza dei contenuti. Questi controlli completano le autorizzazioni del servizio esaminando il modo in cui identità, contenuto in entrata e informazioni diagnostiche viaggiano attraverso l'applicazione.
Il server deve essere in grado di rifiutare una richiesta non sicura indipendentemente da come ha raggiunto l'applicazione. Identità chiara, controlli delle autorizzazioni a livello di servizio, output sicuro e record di audit significativi lavorano insieme per rafforzare tale confine.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto TicketOps di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce — confrontandolo anche con la nostra build di riferimento su GitHub.
- VerificaVerifica delle conoscenze — Modulo 11 · 12 min · Soglia di superamento 80%
- Laboratorio praticoLab — Autenticazione, autorizzazione e audit · 40 min
Obiettivo: Aggiungi una simulazione di autenticazione, autorizzazione basata sui ruoli, controlli dei permessi lato server, gestione sicura dell'HTML e log di audit. Dimostra che un'azione non autorizzata non può essere eseguita nemmeno se un controllo della UI viene abilitato manualmente. Deliverable: schermata di accesso; servizio dei permessi; controlli di autorizzazione a livello di servizio; policy per testo/HTML sicuri; checklist di sicurezza.
Modulo 12: Rilascio, diagnostica, bilanciamento del carico e consegna del capstone
Modulo 12 di Architettura di produzione in profondità. Leggi la guida della lezione e la guida ai concetti applicati, guarda la videoguida sul rilascio, supera la verifica delle conoscenze e poi costruisci il rilascio e la consegna del capstone nel lab pratico.
- LetturaGuida della lezione · 12 min
Prepara un'applicazione Wisej.NET per il rilascio e l'esercizio con le scelte di hosting, gli health check, il logging, la diagnostica, il bilanciamento del carico, le note di rilascio e la presentazione del capstone.
- LetturaGuida al lab / esame · 12 min
Approfondisci il rilascio: i compromessi dell'hosting, health check e diagnostica, le sticky session per il bilanciamento del carico e un piano di rilascio e rollback pulito.
- Lezione videoPrepara il capstone per il rilascio · 8 min
Una videoguida sul rilascio che puoi eseguire direttamente qui nel player.
Trascrizione della narrazione
Preparare TicketOps per il funzionamento dopo la pubblicazione. Il capstone include decisioni di hosting, prove sanitarie, diagnostica e istruzioni di ripristino in modo che qualcuno oltre allo sviluppatore possa verificare e supportare l'applicazione in esecuzione.
Scegli la destinazione dell'hosting verificandone l'effetto su configurazione, log, ridimensionamento, identità e connessioni WebSocket. Tali requisiti modellano il piano di supporto, quindi registrali prima di considerare la pubblicazione come una distribuzione completata.
Esponi informazioni sanitarie sicure tramite HealthCheck.json per monitor e bilanciatori del carico. La risposta dovrebbe aiutare a determinare se l'istanza è utilizzabile senza rivelare credenziali o altri dettagli di configurazione di cui non hanno bisogno i chiamanti operativi.
Inserisci le informazioni sull'ambiente, lo stato della registrazione e i controlli in una pagina di diagnostica protetta dal ruolo. Ciò offre al personale di supporto autorizzato un punto di partenza coerente, limitando al tempo stesso le informazioni mostrate a ciò che è utile per il funzionamento dell'applicazione.
Il server conserva lo stato della sessione di ciascun utente. Configura sessioni permanenti in modo che il sistema di bilanciamento del carico mantenga l'utente sull'istanza corretta. La distribuzione deve consentire inoltre la connessione WebSocket dell'applicazione.
Raggruppare insieme l'elenco di controllo, la diagnostica, le note di rilascio, le note di rollback e lo script dimostrativo. Il pacchetto dovrebbe spiegare cosa è cambiato, come verificarlo e come ripristinarlo, rendendo la versione rivedibile da un'altra persona.
Il progetto finale sarà pronto per essere consegnata quando il suo funzionamento sarà comprensibile quanto i suoi schermi. Conserva le prove del rilascio con l'applicazione in modo che il supporto e le modifiche future partano da una base condivisa e documentata.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto TicketOps di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce — confrontandolo anche con la nostra build di riferimento su GitHub.
- VerificaVerifica delle conoscenze — Modulo 12 · 12 min · Soglia di superamento 80%
- Laboratorio praticoLab — Rilascio e consegna del capstone · 40 min
Obiettivo: Prepara l'applicazione capstone per il rilascio. Aggiungi HealthCheck.json, una pagina di diagnostica, una checklist di rilascio, note di rilascio, note di rollback e uno script finale per la demo. Deliverable: HealthCheck.json; checklist di rilascio; pagina di diagnostica; note di rilascio; presentazione del capstone / script della demo.