come dovrei progettare oggetti attorno a questo requisito aziendale?

1

Questo è il requisito aziendale:

" Un pacchetto vacanze (ad es. Pacchetto vacanze New York NY) può essere offerto in diversi modi in base alla città di origine:

  • Da Nuova Delhi a New York
  • Da Bombay a NY
  • NY stesso (pacchetto Land)

(Grassetto implica selezione predefinita)

a. e b. L'utente può volare da New Delhi o Bombay a NY.
c. NY è un pacchetto Land, in cui un utente può raggiungere NY da solo ed è un pacchetto vacanze indipendente. "

Diciamo che ho una classe che rappresenta HolidayPackage , Destinazione (alias City).

public class HolidayPackage{
    Destination holidayCity;
    ArrayList<BaseHolidayPackageVariant> variants;
    BaseHolidayPackageVariant defaultVariant;
}

public abstract class BaseHolidayPackageVariant {
    private Integer variantId;
    private HolidayPackage holidayPackage;
    private String holidayPackageType;
}

public class LandHolidayPackageVariant extends BaseHolidayPackageVariant{
}

public class FlightHolidayPackageVariant extends BaseHolidayPackageVariant{
    private Destination originCity;
}

Quali strutture dati / oggetti dovrei progettare per supportare:

  • Opzioni
  • un valore predefinito all'interno di quelle opzioni

Sidenote: un HolidayPackage può anche essere offerto in diversi modi in base alle selezioni di hotel. Mi piacerebbe seguire un design che posso sfruttare per supportare questo caso d'uso in futuro.

Questo è il design del backend che ho in mente.

    
posta brainydexter 22.03.2012 - 11:50
fonte

2 risposte

3

A giudicare dallo schema del database proposto, potresti avere una classe chiamata HolidayPackage con attributi di tipo Hotel , Città e PackageVersion .

PackageVersion sarebbe una superclasse di LandPackageVersion e FlightPackageVersion . Viene dichiarato come generico PackageVersion in modo che il polimorfismo o l'iniezione di dipendenza possano essere utilizzati per popolarlo con la sottoclasse appropriata.

public Class HolidayPackage{

    Hotel hotel;
    City city;
    PackageVersion package;  //could be an instance of LandPackageVersion or FlightPackageVersion
    .
    .
    .

Modifica

OK, ora che hai modificato la tua domanda per mostrare la struttura della tua classe, posso vedere che hai già organizzato come stavo raccomandando sopra. Pertanto, questo dovrebbe funzionare bene se hai metodi che ti dicono informazioni su ogni BaseHolidayPackageVariant nelle varianti ArrayList, come se ci sia o meno un volo ad esso associato.

Esempio semplificato:

public abstract class BaseHolidayPackageVariant {

    public boolean hasFlight(){}
}

public class LandHolidayPackageVariant extends BaseHolidayPackageVariant{

    public boolean hasFlight(){
        return false;
    }
}

public class FlightHolidayPackageVariant extends BaseHolidayPackageVariant{

    public boolean hasFlight(){
        return true;
    }
}

Quindi, in fase di esecuzione, non hai davvero bisogno di usare instanceOf () perché saprai tutto ciò che devi sapere sugli Oggetti usando questi metodi descrittivi.

    
risposta data 22.03.2012 - 13:47
fonte
0

In base all'attuale implementazione, sembra che il pacchetto vacanze contenga un meccanismo di viaggio (aereo, terra, da, a), un posto dove stare e anche ciò che stai chiamando attualmente. Le tue opzioni dovrebbero essere un elenco di pacchetti vacanze che contengono diverse combinazioni di viaggio, hotel e proprietà del pacchetto base.

Se si suppone che i pacchetti presentati abbiano un valore predefinito, puoi semplicemente aggiungere un valore intero che è l'indice di ordinamento / classifica e poi decidere che il valore predefinito è quello con il numero più basso o più alto.

    
risposta data 22.03.2012 - 15:37
fonte