Domanda modello disegno

0

Sono relativamente nuovo al mondo di OOP e, avendo letto alcuni schemi di progettazione, sto lottando con quel momento "aha".

Ho i seguenti oggetti Evento (evento singolo, con ora di inizio e ora di fine e disponibilità) EventCollection (Contiene più istanze dell'Evento, clonate e impostate o istanziate con 'new' e un attributo date) Prenotazione (con una collezione di EventCollections)

Questo a sua volta, dà la possibilità di scegliere più "slot" di eventi al giorno.

L'oggetto, EventCollection, conterrà le "fessure" temporali pre-calcolate, per il "prelievo" o un insieme di eventi per i quali è stato prenotato.

Ora la mia prima pugnalata a questo, almeno fino al punto di EventCollection è stata lungo queste linee

class Event {
    protected startTime
    protected endTime
    protected status //available, booked, unavailable

    public function __construct(startTime, endTime, status = 'available')
    {
        this->startTime = startTime
        this->endTime = endTime
        this->status = status
    }

    public function changeStatus(status)
    {
        this->status = status
    }

    public function getStatus()
    {
        return this->status
    }
}

class EventCollection {
    protected date
    protected events

    public function __construct(date)
    {
        this->date = date
    }

    public function buildAvailableEvents()
    {
        // Loop through construction of events calculated by pre defined offsets
        this->events[] = new Event(startTime, endTime, 'available')
    }

    public function populateFromDb(SomeInterface db)
    {
        // Loop through construction of events determined by the interface of a database source
        this->events[] = new Event(startTime, endTime, status)
    }

    public function getAvailableEvents()
    {
        return this->getEvents('available')
    }

    public function getBookedEvents()
    {
        return this->getEvents('booked')
    }

    public function getUnavailableEvents()
    {
        return this->getEvents('unavailable')
    }

    protected function getBlocks(status)
    {
        selectedEvents = []
        foreach (this->events as event) {
            if(event->getStatus() == status)
            {
                selectedEvents[] = event
            }
        }

        return selectedEvents
    }
}

class Booking {
    protected name
    protected email
    protected moreCustomerDetails

    protected EventCollection

    public function __construct(name, email ...)
    {
        this->name = name
        this->email = email
    }

    public function addEventCollection(EventCollection eventCollection)
    {
        this->eventCollection[] = eventCollection
    }
}

//Client
booking = new Booking('me', '[email protected]')
eventCollection = new EventCollection()->buildAvailableEvents()
booking->addEventCollection(eventCollection)

Questo è conforme a qualsiasi schema? Sento che mi manca qualcosa perché sto semplicemente usando gli oggetti come possessori semplificati di matrici di oggetti. Questo può essere rielaborato in tali modelli per ridurre la massa della classe? Vedo alcune duplicazioni di codice, ma ho semplicemente refactato quello all'interno della stessa classe.

Ho cercato di separare le singole responsabilità.

Qualcuno può suggerire miglioramenti? Questo non è un codice operativo, l'ho solo parzialmente soppresso.

    
posta Big-G 04.12.2014 - 03:07
fonte

1 risposta

3

I modelli di progettazione sono soluzioni di "best practice" per le sfide che si verificano frequentemente durante la progettazione del software. Il vantaggio dei modelli di progettazione sta nel

  • Se trovi che il tuo problema (quasi) si adatta a un modello di progettazione, hai un nome breve per chiamare il tuo problema, che facilita la comunicazione con gli altri
  • Le soluzioni presentate nei modelli di progettazione sono generalmente ben studiate e i vantaggi, gli svantaggi, le sfide nell'implementazione e quando non per usarlo sono in genere ben documentati.

D'altra parte, gli schemi di progettazione non coprono mai e non copriranno mai gli aspetti tutti di un progetto. Solitamente si concentrano maggiormente sulle sfide di progettazione che hanno soluzioni o compromessi non banali.
Una composizione di (collezioni di) classi come mostrate nel vostro esempio non è descritta in nessun modello di progettazione che io conosca. Questo non è male ed è molto probabile perché non è considerato una sfida progettuale abbastanza grande da giustificare lo sforzo necessario per scrivere un modello di design.

    
risposta data 04.12.2014 - 09:19
fonte

Leggi altre domande sui tag