Domanda sulla progettazione dell'applicazione relativa al salvataggio dei file

3

Sto lavorando su un'applicazione in C # e sto riscontrando alcune difficoltà estreme nel risolvere questo problema di progettazione.

Fondamentalmente l'applicazione consente agli utenti di creare libri di cucina. Un utente può fare clic su "nuovo libro" e l'applicazione creerà un libro con un nome specifico. Ora l'utente può aggiungere "ricette" a quel libro. L'utente può salvare il libro in qualsiasi momento. Possono caricare questo libro su altri computer con l'applicazione. Nell'applicazione è possibile aprire solo un libro alla volta. Quindi, se l'utente desidera creare un nuovo libro o aprire un libro diverso, l'applicazione dovrà chiudere il libro corrente e quindi aprire il libro successivo.

La mia domanda è, quale sarebbe il modo migliore per risolvere questo problema?

  • Come verifico se un libro è aperto?
  • Come faccio ad avere l'applicazione per creare il nuovo libro?
  • Come potrei avere l'applicazione "chiudi e dimentica" il libro che è stato chiuso, in modo che l'unico libro aperto sia il nuovo?

Quello che stavo pensando è che avrei una classe di CookBook e una classe di ricette. La classe CookBook avrebbe tenuto le informazioni relative al nuovo libro che è stato creato e terrebbe un elenco di tutte le ricette in quel CookBook. Sto solo facendo fatica a capire il modo migliore per dare all'utente la possibilità di creare un nuovo CookBook e chiudere l'attuale libro di cucina in modo che l'utente possa crearne uno nuovo.

La classe CookBook avrà una funzione che permetterà di scrivere il contenuto del CookBook e le ricette del CookBook in un file. Ci sarà anche una funzione in CookBook che popolerà l'interfaccia utente dell'applicazione in base al contenuto di un CookBook caricato / aperto dall'utente.

    
posta prolink007 18.07.2011 - 00:27
fonte

2 risposte

2

L'idea di un libro di cucina è buona. Sembra che la tua applicazione funzionerà più o meno come un documento di word (wrt to file lifecycle).

Crea il tuo oggetto libro di cucina e ne hai uno alla radice relativa della tua applicazione (il modulo radice, immagino, non Program.cs). "currentCookBook" suona bene.

Come potrei controllare se un libro è aperto?

Sai se un utente sta lavorando o meno in un libro di cucina aperto in due modi:

  • if (this.currentCookBook == null) {/ * nessun libro di cucina è aperto * /}
  • if (this.currentCookBook == CookBook.NullObject) {/ * modello null-object * /}

Come potrei avere l'applicazione per creare il nuovo libro?

Easy peasy:

this.currentCookBook = new CookBook(); // or = CookBook.Empty;

Come potrei avere l'applicazione "Chiudi e dimentica" il libro che è stato chiuso, in modo che l'unico libro aperto sia il nuovo?

Crea un oggetto che è responsabile dell'IO dei libri di cucina.

internal CookBookIO
{
    public static void Save(CookBook cb, string filename) 
    { 
        /* writes cookbook to filename */
    }

    public static CookBook Open(string filename)
    {
        CookBook cb = new CookBook();

        /* read file and populate cb */

        return cb;
    }
}

Apri un libro di cucina in questo modo:

using (OpenFileDialog ofd = new OpenFileDialog() { /* properties */ })
{
    if (ofd.ShowDialog() == DialogResult.Cancel)
        return;

    this.currentCookBook = CookBookIO.Open(ofd.Filename);
}

... e salva (e chiudi) in questo modo:

using (SaveFileDialog sfd = new SaveFileDialog() { /* properties */ })
{
    if (sfd.ShowDialog() == DialogResult.Cancel)
        return;

    CookBookIO.Save(this.currentCookBook, sfd.Filename);
    if (saveAndClose)
    {
        this.currentCookBook = null; 
        // or this.currentCookBook = CookBook.NullObject;
        // or this.currentCookBook = CookBook.Empty; if you want to have it 
        // default to a new, open book upon saveAndClose
    }
}
    
risposta data 18.07.2011 - 02:04
fonte
1

Di solito questo tipo di cose viene fatto con un piccolo database. Non solo l'uso di un database significa che non devi preoccuparti troppo di tenere traccia degli stati dei file, puoi effettuare ricerche, rilevare ricette duplicate, tutto ciò che devi codificare da solo.

Se vuoi davvero fare tutto da solo, aggiungi una classe BookShelf che è responsabile della conoscenza di tutti i libri di cucina. Chiedi al BookShelf di avere un libro per te (aperto), di mettere via il libro, e il BookShelf gestirà tutti i dettagli di creare, aprire e chiudere.

In seguito, se ti sposti in un database, puoi fare in modo che BookShelf gestisca tutte le operazioni del DB e sei già ben configurato.

Per quanto riguarda il salvataggio, dovresti salvare una ricetta ogni volta che viene apportata una modifica e lasciare la pagina e dare anche un pulsante per consentire all'utente di salvare manualmente (li fa sentire meglio) ogni volta che lo desiderano.

    
risposta data 18.07.2011 - 01:11
fonte

Leggi altre domande sui tag