C # - Come dovrei progettare il mio server? [chiuso]

0

Sono confuso nel progettare un server TCP con C #.

  • Dove devo inserire il mio listener TCP? all'interno della classe Programma o creare la classe Server ? o ...
  • Dove dovrei iniziare a gestire il client ? da Listener accetta la richiamata o crea la classe ClientHandler ? o ...
  • La classe Cliente è responsabile della ricezione di messaggi o devo creare una classe separata? Come dovrei nominare quella classe? Ricevitore o Connessione ?
  • Dove devo mantenere l'elenco dei clienti? Server o ClientManager o Client classe?

Queste domande mi colpiscono il cervello ogni volta che faccio networking. Ho altre domande ma immagino che tu lo sappia.

    
posta moien 08.07.2018 - 16:05
fonte

1 risposta

0

Le classi non sono l'unico meccanismo per creare astrazioni. Pacchetti e spazi dei nomi sono altri. Quindi, quando hai molti concetti molto correlati ma differenziati, mettili nello stesso spazio dei nomi - non aver paura di creare troppe classi.

Una cosa importante di una singola classe è la sua durata di utilizzo. La durata della classe e tutti i suoi campi di istanze dovrebbero essere uguali. Idealmente, ogni campo di istanza è completamente rilevante per l'oggetto durante la sua intera vita. (È necessario un giudizio: possono esserci eccezioni per un oggetto che impiega alcuni metodi per inizializzarsi completamente, o per abbattere completamente).

Possiamo lavorare su questo pensiero di coesione della vita in entrambe le direzioni:

Elenca tutti i possibili concetti e considerali come candidati seri per la loro classe separata. Lavora con esso e, se risulta che due (o più) di quelle classi vengono sempre create (e distrutte / lasciate andare) insieme, suggerisce che potresti unirle insieme - ciò può essere fatto per composizione, ereditarietà, o semplicemente unendoli in un unico concetto (rimuovendo l'altro).

Se vai dall'altra parte, puoi creare solo le classi che ritieni siano concetti indipendenti e dividerle quando trovi che all'interno della classe, i campi dell'istanza raggruppano in modo tale che alcuni dei campi siano irrilevanti durante la vita di alcuni oggetti .

In pratica potremmo trovare entrambi: a volte trovare casi in cui dovremmo dividere e altri dove dovremmo fonderci. Usa la nozione di vita come guida per decidere quando.

Idealmente (IMHO) poniamo poco o nessuno stato in Program e l'unica logica in main crea un'istanza di qualcosa di utile e la attiva - basta usare Program . main come un ponte tra il non -un punto di ingresso e il sistema degli oggetti; in questo modo il resto del codice è completamente orientato agli oggetti.

    
risposta data 08.07.2018 - 17:24
fonte

Leggi altre domande sui tag