Architettura del programma: come gestire gli oggetti che sono interdipendenti

2

Considera il seguente caso, immagine Sto facendo un semplice programma di chat; Voglio che sia estensibile in modo che sia facile aggiungere nuovi script e interfacce utente.

Voglio il controller di base e il modello di essere separato dal interfaccia in modo ho potuto qualcosa di simile a quanto segue, sto usando la sintassi di Python per amor di semplicità.

 class chat_controller:
     def send_message():
     def add_new_interface(iface)


class console_ui:
    def __init__(chat_interface): #new need access to the chat ctrl
    def receive_new_message(msg):

class python_scripting:
    def __init__(chat_interface): #new need access to the chat ctrl
    def receive_new_message(msg):


c=chat_controller(...)
c.add_new_interface(console_ui)
c.add_new_interface(python_scripting)

Questo funziona, FINO voglio anche l'interfaccia di Python per essere in grado di interagire con l'interfaccia utente (ad esempio modificare i colori, a prescindere) o fino a quando voglio essere in grado di eseguire le macro di script dall'interfaccia utente.

Sull'idea avrei avuto qualcosa di simile:

 class chat_controller:
     def send_message():
     #register new interface with name
     def add_new_interface(name, iface)
     def try_get_interface(name) #none or iface

ma poi dovrò fare un cast basandosi sul valore della stringa per essere corretto, il che è un po 'grossolano.

Un altro modo, sarebbe quello di rendere ciascuno degli oggetti di condivisione di avere una funzione 'add_new_inteface', ma ora sembra solo ingombrante.

Bare in mente, è forse il caso che il programma di chat può essere eseguito con fuori script Python, o con un diverso motore di script, o dire un web o GUI piuttosto che console, si suppone di essere generico.

Qualsiasi input è benvenuto.

    
posta 111111 11.11.2014 - 22:03
fonte

1 risposta

1

Credo che dovresti avere il minor numero possibile di oggetti interdipendenti. Nel tuo caso, come ho capito, chat_controller non è in realtà un iniziatore di eventi. È più simile a un gestore centrale del sistema.

Suppongo che quello che devi fare è dichiarare CharController come una classe, che ha metodi, registrando (spingendo) vari eventi, sta accadendo nel sistema e poi usa il pattern Observer per permettere a varie classi di iscriversi ai suoi eventi .

Ma sono sicuro che alla fine scoprirai che ci sono molti tipi di eventi e ChatController sarà suddiviso in diverse classi, ciascuna responsabile di una particolare funzione di sistema per evitare la complessità.

Ma è difficile dare qualche buon consiglio fino a quando non si conosce meglio la natura del sistema. Com'è? Che cosa fa?

    
risposta data 31.01.2015 - 19:03
fonte