Dove memorizzare i dati front-end per "calcolatrice oggetto"

2

Recentemente ho completato una libreria linguistica che funge da filtro gigante per gli articoli alimentari e scorre un po 'come questo :Products -> Recipes -> MenuItems -> Meals e infine, dopo l'invio, crea un Order .

Ho anche completato una struttura di database che memorizza tutte le informazioni pertinenti per ogni classe, e sembra adattarsi alle mie esigenze.

Il problema che sto avendo è quello di collegare i due. Ho immaginato che tutte le informazioni fossero locali per ogni istanza del prodotto, dove esiste un utente di back-end che modifica e manipola i dati e più utenti front-end che selezionano il loro Meal (s) per creare un Order . Idealmente, tutti gli utenti front-end avrebbero tutte queste informazioni memorizzate localmente all'interno della libreria e aggiornerebbero la libreria all'avvio da un database.

Come devo archiviare i dati in modo che possa caricarli nella libreria ogni volta che l'utente apre l'applicazione? Imballa un database a bordo e carico e popola ogni volta?

L'unico metodo che attualmente posso immaginare, anche se ho solo 500 possibili oggetti Product , richiederebbe di foreach l'elenco per ogni Product che devo associare a Recipe e quindi e così via ogni volta che rilancio il programma, che sembra un carico molto dispendioso.

Ecco un flusso generale della mia architettura:

Prodotti:

public class Product : IPortionable
{
    public Product(string n, uint pNumber = 0)
    {
        name = n;
        productNumber = pNumber;
    }


    public string name { get; set; }
    public uint productNumber { get; set; }
}

Ricette:

public Recipe(string n, decimal yieldAmt, Volume.Unit unit)
    {
        name = n;
        yield = new Volume(yieldAmt, unit);
        yield.ConvertUnit();
    }
    /// <summary>
    /// Creates a new ingredient object
    /// </summary>
    /// <param name="n">Name</param>
    /// <param name="yieldAmt">Recipe Yield</param>
    /// <param name="unit">Unit of Yield</param>
    public Recipe(string n, decimal yieldAmt, Weight.Unit unit)
    {
        name = n;
        yield = new Weight(yieldAmt, unit);
    }

    public Recipe(Recipe r)
    {
        name = r.name;
        yield = r.yield;
        ingredients = r.ingredients;
    }

    public string name { get; set; }
    public IMeasure yield;

    public Dictionary<IPortionable, IMeasure> ingredients = new Dictionary<IPortionable,IMeasure>();

MenuItems:

public abstract class MenuItem : IScalable
{
    public static string title = null;

    public string name { get; set; }
    public decimal maxPortionSize { get; set; }
    public decimal minPortionSize { get; set; }

    public Dictionary<IPortionable, IMeasure> ingredients = new Dictionary<IPortionable, IMeasure>();

e Pasto:

public class Meal
{
    public Meal(int guests)
    {
        guestCount = guests;
    }

    public int guestCount { get; private set; }

    //TODO: Make a new MainCourse class that holds pasta and Entree
    public Dictionary<string, int> counts = new Dictionary<string, int>(){
       {MainCourse.title, 0},
       {Side.title , 0},
       {Appetizer.title, 0}
    };

    public List<MenuItem> items = new List<MenuItem>();

Il Database memorizza e collega ciascuno di questi nomi di base e somma gli ID di utilizzo ( RecipeID, ProductID and MenuItemID )

    
posta Justin Grahn 18.08.2014 - 22:11
fonte

1 risposta

0

Esistono sicuramente varie strategie per risolvere questo problema.

Un modo possibile è farlo client-server.

Usa modello del caso:

L'app front-end sarà l'app desktop installata sul dispositivo dell'utente senza il suo database. Quando l'utente front-end deve selezionare da menu, invierà il metodo GetMenuItems sul server e riceverà tutte le voci del menu (senza collegamenti a Prodotti e ricette).

Quindi l'utente front-end crea la raccolta del modulo pasti disponibile MenuItems. Quando finisce, inserisce la sua scelta sul server invocando il metodo MakeOrder con la raccolta Meals come parametro.

Il server creerà solo istanze di oggetti (di classi Product, Recipe, MenuItem) necessari per completare il calcolo richiesto. Suppongo che dal dato MenuItem sia possibile selezionare solo Ricette rilevanti e Rrodotti pertinenti. Solo facoltativamente il server può memorizzare nella cache tutte le istanze di Prodotto, Ricetta, MenuItem.

Quindi il risultato del calcolo verrà quindi presentato sul client.

    
risposta data 18.08.2014 - 23:37
fonte

Leggi altre domande sui tag