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?