Design orientato agli oggetti - Progettare regole aziendali

2

Ho problemi nella progettazione di classi che riflettono comportamenti / regole aziendali diversi. Un esempio per spiegare il mio caso:

- a tour has a departure
- a departure may be a guaranteed departure
if a departure is guaranteed:
    - a guaranteed departure may have a date that, starting from that date:
    * departure cannot be cancelled by tour agency for any reason
    * before that date in can be cancelled
    * but it may not have a date indicator, which means departure can't be cancelled
else:
   - departure can be cancelled anytime by agency for any reason

Qual è il modo corretto di progettare classi in tali scenari?

  • Un campo booleano semplice (cancellabile) e un campo Data semplice (cancellabile prima) nella classe Partenza

se cancellabile == true e cancellableBefore == null = > sempre cancellabile

se cancellabile == true e cancellableBefore! = null = > cancellabile se ora < cancellableBefore

...

e così via ...

o c'è una risposta OO a questo?

    
posta Reek 04.11.2015 - 11:30
fonte

1 risposta

3

Per rendere questo più OO, crea tre classi che rappresentano la tua partenza e isola la logica per determinare se può essere cancellata lì. Le classi ereditano da un'interfaccia comune IDeparture con un metodo canBeCanceledOn che richiede un datetime che indica il punto nel tempo in cui viene tentata una cancellazione.

Quindi, crea tre classi per le tue partenze. RegularDeparture può essere annullato in qualsiasi momento e restituirà sempre true per canBeCanceledOn. FixedDeparture sarebbe una partenza fissa che non può essere annullata e restituisce sempre false per canBeCanceledOn. CancellableUntilSetDateDeparture utilizza la logica per determinare se la data fino alla quale la partenza può essere annullata è precedente alla data di tentativo di cancellazione fornita.

In questo modo hai classi responsabili di una sola cosa (rappresentano un tipo di partenza) e puoi aggiungere ulteriori tipi di partenze secondo necessità e "inserirli" in Tours.

    
risposta data 04.11.2015 - 11:43
fonte

Leggi altre domande sui tag