Sto lavorando a un progetto parallelo e ho attivato tutte le regole per l'analisi del codice in Visual Studio e ho ricevuto l'avviso:
Warning CA1006 Consider a design where '
Vote<T>.CalculateWinner(List<Vote<T>>)
' doesn't nest generic type 'List<Vote<T>>
'
E indica davvero un punto dolente nel mio design. Ho una classe base astratta Vote<T>
che contiene un elenco delle opzioni per eseguire un'elezione sul tipo T
.
Ecco cosa voglio esistere:
Esistono tre tipi di oggetti, PolicyCategory
, Policy
e Funding
. Un PolicyCategory
contiene un elenco di voti sulle politiche al suo interno e un voto su Policy
deve contenere anche un elenco di voti su un oggetto Funding
. La procedura elettorale (sembra essere STV) viene quindi eseguita sui voti nella categoria e quindi sui voti sulla politica vincente. La procedura è la stessa per entrambi i tipi di voti.
Quello che ho ora è PolicyVote : Vote<Policy>
e FundingVote : Vote<Funding>
, la logica di elezione principale è in Vote<T>
, e ho metodi che lanciano List<PolicyVote>
in List<Vote<Policy>>
, e poi chiamiamo Vote<T>.CalculateWinner()
.
Questo è chiaramente piuttosto orribile dato che sto violando la mancanza di controvarianza in C #.
Come può essere migliorato?