Double Dispatch è un pattern anti?

1

Vedi il link qui: link , che descrive Double Dispatch come odore di codice. Ora guarda questo link: link , che parla circa la doppia spedizione che rafforza il dominio. Lo stesso autore del secondo link (che crede in Double Despatch) ha scritto il codice qui: link e in particolare questo (che credo sia il modello di doppia spedizione):

public Offer AssignOffer(OfferType offerType, IOfferValueCalculator valueCalculator) 
{ 
    DateTime dateExpiring = offerType.CalculateExpirationDate(); 
    int value = valueCalculator.CalculateValue(this, offerType); 
    var offer = new Offer(this, offerType, dateExpiring, value); 
    _assignedOffers.Add(offer); 
    NumberOfActiveOffers++; 
    return offer; 
} 

Da quello che posso capire; il primo autore sta dicendo che il doppio invio è un modello anti perché viola i principi SOLID. Tuttavia, credo che i principi SOLID siano violati nel suo codice a causa del modo in cui ha progettato le classi; non specificamente a causa della doppia spedizione. Inoltre noto che i due articoli sono stati scritti entro un mese l'uno dall'altro nel 2010.

Double Dispatch è un pattern anti?

    
posta w0051977 03.01.2018 - 10:09
fonte

1 risposta

5

No, il doppio invio non è un antipattern, è una tecnica perfettamente valida.

L'articolo descrive il problema dell'espressione . Vuoi essere in grado di aggiungere nuove forme e nuove superfici di disegno senza violare il principio di apertura / chiusura. La doppia spedizione è una possibile soluzione a questo problema. Ma è possibile utilizzarlo in modo tale da violare il principio di apertura / chiusura, ad es. se richiedi che ogni forma abbia un metodo di disegno per ogni superficie, devi modificare tutte le forme quando aggiungi una nuova superficie di disegno. Se per qualche motivo vuoi evitare ciò, puoi risolverlo disponendo di alcuni adattatori di rendering tra le forme e le superfici e usa il doppio invio per richiamare l'adattatore corretto.

In ogni caso, anche se alcune tecniche violano il principio aperto / chiuso o SOLID in generale, ciò non lo rende un antipattern. SOLID non è un bene assoluto, è solo un insieme di linee guida (raggruppate sotto un nome accattivante) che dipendono dal contesto e hanno un'applicabilità limitata.

    
risposta data 03.01.2018 - 10:39
fonte

Leggi altre domande sui tag