Guida all'implementazione della raccolta dati simile a una procedura guidata (successiva, successiva, finale)

5

Sto iniziando a creare un'interfaccia per i nostri tecnici di settore per chiudere gli ordini di lavoro e abbiamo diversi moduli cartacei richiesti per diversi clienti. Speravo di creare un sistema in cui posso impostare una pagina per ogni modulo (tutto in .Net 4.0 / wpf e possibilmente usare caliburn.micro se non è una cattiva scelta), e in base alle regole, visualizzare determinate pagine automaticamente. Ho iniziato creando un framework di base costituito da un modulo wpf con 3 pulsanti (back, next / finish, cancel) e un Frame. Alla fine spero di avere un oggetto posso passare un identificatore che andrà a prendere tutte le informazioni di cui ha bisogno, decidere quali pagine mostrare, mostrarle in ordine e aggiornare il nostro database quando l'utente fa clic.

C'è qualcosa di specifico che dovrei ricercare / imparare per rendere più facile il mio lavoro, o il mio prodotto finito più robusto / affidabile? Quale sarebbe un buon approccio per decidere quali pagine mostrare? Principalmente si baserebbe su qualcosa come Show this form if Customer is X , ma mi piacerebbe essere più complesso (estensibile?) Di quello che mi serve. Alla fine, ogni pagina / modulo genererà probabilmente anche un file PDF del modulo reale del cliente, compilato. Sembra una cosa di routine da avere, ma non ho mai implementato o utilizzato personalmente nulla che lo abbia fatto, me stesso, quindi sto andando alla cieca. la finestra di hosting chiederà la pagina se devono essere mostrati? le pagine dovrebbero parlare da sole? la finestra di hosting deve passare l'intero oggetto dati a una funzione bool ShouldIShowYou() e lasciare che la pagina risolva il problema? deve esserci già un meccanismo per "registrare" una pagina come se fosse per un certo "qualcosa", ma non sono sicuro di cosa sia. Mi piacerebbe che fosse aggiornato abbastanza facilmente, ma l'app viene distribuita tramite clickonce e il numero totale di utenti sarà inferiore a 100 per il prossimo futuro. è sufficiente aggiungere un nuovo oggetto di pagina + logica alla raccolta e la ridistribuzione non dovrebbe causare problemi.

qualche altra domanda che ho avuto:

  • potrebbe (dovrei) implementarlo come una transazione in .net, dove potrei iniziare una transazione quando viene creata la finestra / oggetto, avere ogni singola pagina nel frame fare il proprio lavoro di dati (tramite una condivisione wcf proxy), quindi eseguire il commit della transazione dopo che tutto è andato a buon fine?

  • ogni pagina dovrebbe semplicemente creare un oggetto e la finestra principale passerà l'oggetto indietro e l'applicazione di origine farà funzionare i dati? per esempio. rendere l'intero segmento dell'applicazione non sensibile ai dati. non è sicuro che funzionerà molto bene, sembra un incubo di manutenzione.

  • questo è il posto sbagliato dove inserire questo tipo di domanda? Non sto cercando il codice, quindi non sembrava giusto in overflow. questa è più una domanda "quali sono le parole per descrivere quello che sto cercando di fare".

Grazie!

rileggerò questo 10 o 12 volte nel corso della giornata e cercherò di chiarire se posso. I miei cervelli non fanno sempre parole goff.

    
posta Hoostine 18.05.2012 - 23:03
fonte

1 risposta

1

Gran parte del design di un sistema come questo dipende in realtà dagli utenti, dal modo in cui sono connessi e dal tipo di connessioni che hanno. Inoltre, quanto è importante per te avere subito i risultati o se un approccio di "sincronizzazione" è ok ...

'Field techs' suona come il tipo di persone che lavoreranno in modalità disconnessa?

Quindi probabilmente vorrai vedere un modo per archiviare i risultati e sincronizzarli quando sono online? Ciò porta a un'intera serie di cose come SQL CE, forse RavenDB incorporato, qualcosa sulla macchina locale (forse anche un semplice CSV). Quando sono online, esegui la sincronizzazione con un servizio in grado di raccogliere tutte le risposte.

In termini di pagine stesse, a seconda di quante ci sono / pianificate di essere a lungo termine, basta collegarle tutte al progetto, o se possono essere raggruppate, magari singole librerie di classi per ogni gruppo di pagine. Quindi distribuisci il lotto (se il pacchetto è di dimensioni moderate e i tecnici del campo hanno connessioni decenti) o li abbassa su richiesta, o magari li distribuisci separatamente e usa qualcosa come MEF per caricarli in modo dinamico.

Hai codificato la domanda con MVVM, quindi conosci il modello. Le VM dovrebbero dirigere le tue pagine, il comando 'next' saprà (o dovrebbe!) Sapere quale pagina caricare in seguito. In termini di pagine da mostrare in base a quale cliente, per renderlo più 'generico' probabilmente vorrai memorizzare le informazioni sui clienti da qualche parte, magari nel servizio - e sincronizzarle con i tecnici di campo quando si sincronizzano / installano il software.

Puoi fare cose come le espressioni di stringa di codice nei database per generare dinamicamente regole (http://www.fidelitydesign.net/?p=333), e aggiungere la super complessità - tuttavia vorrei evitare di rendere il codice più complesso: iniziare in modo semplice, farlo funzionare e quindi raggiungere la complessità, se necessario.

Per la generazione di PDF, vorrei google per XAML PDF Generation, o se hai i dati in un database a quel punto, il mondo è la tua ostrica, ci sono alcuni grandi scrittori PDF gratuiti (iTextSharp ecc.) e alcuni non così -free - ma anche buono (PDFKit). Dipende dal fatto che tu abbia un budget ristretto o un budget non troppo ristretto:)

    
risposta data 23.05.2012 - 10:09
fonte

Leggi altre domande sui tag