Quindi sto codificando un modo per inviare eventi a più client, e poi far decidere ai clienti come vogliono gestirli. Escludo i bit che non si prestano a spiegare la situazione.
class Event_Beacon
def add_event_eater( self, ee ):
self.event_eaters.add( ee )
def broadcast_event( self, e ):
for e in self.event_eaters:
e.receive_event( e )
Ora, con quanto sopra, posso creare un'istanza di un Event_Beacon e passarlo in giro. Sto pensando che dovrei fermarmi in futuro dal possibile abuso di tutti gli accessi a Event_Beacon.
Ad esempio, supponiamo, ho un Event_Maker. Ha senso che questo Event_Maker abbia accesso al metodo broadcast_event, ma in realtà non add_event_eater. Se l'avessi appena passato con l'istanza del beacon dell'evento, avrei potuto in qualche futuro ampliamento di questo particolare evento, incidere casualmente un add_event_eater all'interno dell'evento.
Quindi è buona pratica creare un'interfaccia limitante in modo che io dia un altro oggetto esattamente di cui ha bisogno e niente di più? Qualcosa come:
class Event_Beacon_Broadcast_Remote
def __init__( self, event_beacon ):
self.beacon = event_beacon
def broadcast_event( self, e ):
self.beacon.broadcast_event( e )
# note the lack of add_event_eater in this interface