Quale sarebbe il miglior approccio OOP per confrontare gli elenchi di oggetti? [chiuso]

1

Attualmente sto lavorando su un algoritmo per confrontare due elenchi di oggetti. Qualcosa del genere:

Ho un elenco di vendite:

class Sale
{
    protected $client;

    protected $products (ArrayCollection of Product objects with id and amount);

    protected $status;
}

E sto ricevendo un elenco non ordinato di SaleProducts come questo:

[
    {
        'client_id' => 1,
        'product_id' => 21,
        'amount' => 1
    },
]

Ho analizzato questo JSON in un array di oggetti Product come questo:

[clientId] => [Products]

Ma sto riscontrando problemi nel controllare questa lista rispetto all'elenco delle vendite precedentemente fornite. Quale sarebbe l'approccio OOP giusto per un problema come questo?

Il mio primo pensiero è stato usare una pila di prodotti e scorrere le vendite e creare candidati per ognuno, ma ho pensato che forse c'era una soluzione migliore per questo

    
posta nimrod188 14.03.2017 - 18:18
fonte

2 risposte

0

Quello che stai descrivendo è una combinazione di entità di join da strutture distinte ma correlate, e anche qualcosa chiamato integrità referenziale, e tutti i prodotti di database management system (DBMS) avranno caratteristiche per definire il modo in cui le tue tabelle si riferiscono e assicurarti che l'integrità referenziale è mantenuto intatto. Dato che c'è una strong probabilità che la prossima cosa che devi progettare è come mantenere quei dati, e la tua decisione sarà quella di sfruttare un DBMS per questo, allora consiglierei di definire le tue tabelle nel DBMS in modo tale che l'integrità referenziale sia garantita .

Se metti i tuoi dati in tabelle in un DBMS con una relazione, diventa una semplice query per unire le tabelle e ottenere i risultati uniti. Da lì puoi facilmente creare un assegno per assicurarti che le vendite che hanno tutti i suoi prodotti classificati come "vendite" abbiano il flag "vendita" come vero.

Inoltre, è possibile creare un AGGIORNAMENTO AGGIUNTIVO che esegue tale controllo e regola di conseguenza il contrassegno, ogni volta che viene aggiornato un record.

Consiglio sempre di sfruttare un DBMS il più possibile perché rende meno lavoro per te. Se esiti a sfruttare un DBMS a causa di costi o licenze, ci sono un sacco di open source e / o prodotti DBMS di comunità che possono più di gestire questi lavori per te.

    
risposta data 14.03.2017 - 18:51
fonte
0

The checking means basically that if one Sale has all its products in the SaleProducts list then the Sale should have status = true - nimrod188

Posso dirti come fare esattamente questo, ma non penso che farlo in questo modo sia in realtà il miglior design. Diciamo che lo stato di Sale diventa true, cosa succede ora?

La mia ipotesi è che ci si preoccupi che siano veri e che debbano interrogarli per scoprire il loro stato perché non ha idea quando arriva la tua lista di SaleProduct .

Ciò che mi piacerebbe di più è un design che ha attivato un evento quando lo stato di Sale è diventato true. In questo modo puoi fare tutto ciò che deve essere fatto, quando è necessario.

Ora, riguardo al modello che risolve il tuo problema. Quello che fai mi ricorda di aspettare che parti di un pacchetto frammentato arrivino per popolare un buffer con il pacchetto completo. I frammenti possono arrivare in qualsiasi ordine ma fino a quando il buffer non è pieno, stai ancora aspettando il resto del pacchetto.

Un grande vantaggio da superare è trovare la tua strada da un SaleProduct a un clientID a un Sale . SaleProducts non ha conoscenza di Sale e sarebbe bello se potesse rimanere così.

Che dire se un Sale potrebbe registrarsi come osservatore di Product oggetti? Ogni Product può essere trovato dal suo ID e può lasciare che Sales registri per essere notificato quando viene visualizzato nel feed SaleProducts .

Ora un Sale può sedersi e aspettare che arrivino le notifiche. Ogni volta che uno entra, lo contrassegna e controlla se sono tutti. Una volta entrati tutti i prodotti, è pronto per il suo cambio di stato. Può solo restituire true quando viene richiesto lo stato o può attivare il proprio evento per gestire il suo nuovo stato in modo da non dover sedersi per sondarlo.

    
risposta data 17.03.2017 - 23:53
fonte

Leggi altre domande sui tag