Decisione di progettazione: oggetto come membro o in un dizionario?

0

Nel contesto della programmazione sportiva, ho una classe ViolationChecker intializzata con una Match , il cui compito è controllare se posizionare la corrispondenza in un dato intervallo di tempo produce una violazione della regola o meno. Un esempio del suo utilizzo sarebbe:

checker = ViolationChecker(match)
match_fits_in_timeslot = checker.check(timeslot)

Il lavoro principale del processo di pianificazione è trovare un adeguato intervallo di tempo per la corrispondenza ervery nella pianificazione, quindi avremo un ViolationChecker per ciascuna di queste corrispondenze.

Nella classe di pianificazione, troveremmo qualcosa in questo modo:

if checker.check(timeslot):
    match.timeslot = timeslot
    match.save()

Ora, la decisione che devo prendere è dove dovrei memorizzare le istanze di ViolationChecker :

  • Dovrebbero essere membri della classe Match ? Sarebbe stato possibile accedervi in questo modo: match.checker .
  • Oppure dovrebbero essere memorizzati in un dizionario di Match - ViolationChecker nella classe Scheduler ? Sarebbero stati raggiunti in questo modo: violation_checkers[match] .

L'opzione A è molto più pulita, mentre l'opzione B è un po 'scomoda. Tuttavia, ha più senso che la responsabilità di chiamare il correttore si trova nella classe Scheduler , il cui compito è, beh, pianificare, piuttosto che chiamarlo da un Match , che è solo un'entità e non necessariamente avere qualcosa a che fare con il processo di pianificazione.

Di solito come viene affrontato questo scenario? Dovrebbe essere un membro o dovrebbe essere usato un dizionario?

    
posta dabadaba 15.06.2017 - 14:46
fonte

1 risposta

3

Penso che, in genere, il controllore delle violazioni non sia un membro della classe di corrispondenza. Come hai affermato, Match rappresenta un'entità coesiva che in realtà non ha nulla a che fare con il processo di pianificazione. Il controllo delle violazioni non è una sua responsabilità, né sembra una responsabilità che dovrebbe avere, almeno non per me.

Con questo in mente, vorrei usare l'idea del tuo dizionario. In alternativa potresti anche creare un'entità completamente nuova la cui responsabilità è quella di rintracciare le istanze del verificatore di violazioni per il tuo programma di pianificazione. Senza saperne di più sul tuo codice, uno di questi sembra il modo migliore per andare. Non sono nemmeno convinto che sembrerebbe meno pulito, dato che sembrerebbe più pulito da un punto di vista organizzativo.

    
risposta data 15.06.2017 - 18:14
fonte

Leggi altre domande sui tag