Class PricingStrategyFactory

java.lang.Object
it.unicam.cs.ids2425.FilieraAgricola.service.pricing.PricingStrategyFactory

@Service public class PricingStrategyFactory extends Object
Factory per la creazione e la selezione della strategia di prezzo (PricingStrategy) appropriata.

Cosa viene fatto: Questa classe agisce come un punto centrale di decisione per determinare quale logica di calcolo del prezzo applicare a una data riga d'ordine.

Perché viene fatto: Utilizzare il pattern Factory permette di disaccoppiare la logica di business (il calcolo del totale) dalla logica di selezione dell'algoritmo. Il chiamante (es. il servizio o il controller) non deve sapere se sta trattando un articolo singolo o un pacchetto; chiede semplicemente alla factory la strategia corretta e la esegue. Questo favorisce la manutenibilità e l'estendibilità del codice (Open/Closed Principle).

  • Constructor Details

    • PricingStrategyFactory

      @Autowired public PricingStrategyFactory(@Qualifier("singleItemPricingStrategy") PricingStrategy singleItemStrategy, @Qualifier("packagePricingStrategy") PricingStrategy packageStrategy)
  • Method Details

    • getStrategy

      public PricingStrategy getStrategy(OrderLine line)
      Seleziona e restituisce la strategia di prezzo corretta in base al contenuto della OrderLine.

      Cosa succede: Il metodo ispeziona l'oggetto OrderLine passato come parametro.

      • Se la riga contiene un riferimento a un MarketplaceItem, restituisce la singleItemStrategy.
      • Se la riga contiene un riferimento a un Pacchetto, restituisce la packageStrategy.

      Perché viene fatto: La natura dell'elemento venduto (singolo o pacchetto) determina regole di prezzo potenzialmente diverse. Centralizzando questa scelta qui, evitiamo di dover disseminare controlli if-else o instanceof nel resto del codice di servizio. Assicura che venga sempre applicata la logica pertinente al tipo di dato presente.

      Parameters:
      line - La riga d'ordine da valutare.
      Returns:
      L'istanza di PricingStrategy idonea per la riga fornita.
      Throws:
      IllegalArgumentException - Se la riga d'ordine non contiene né un item né un pacchetto validi.