2010-05-14 11 views
0

J'ai trois classes:Question de conception: Le client doit-il créer la session et le socket?

  • clients
  • session
  • Socket

deux session & Socket depeand sur le client pour créer les deux objets.
Une session se déroule sur un socket et aucune socket n'est créée sans session. Le client doit-il avoir une fonction qui crée une session de manière publique et une socket en privé?
Cela ne viole-t-il pas la loi de demeter?
EDIT: Code actuel:

class Client 
{ 
private: 
    // Connection details 
public: 
    shared_ptr<Socket> createSocket(); // returns a new socket if the connection is opened 
} 

class Session 
{ 
public: 
    Session(Client &); // Accepts a client and gets a socket for i/o to the server 
} 

Maintenant, quelque chose me dit que la session ne devrait pas être responsable d'obtenir la prise du client et que le client doit créer la session.
Ai-je raison?

Répondre

0

Cela dépend. Tout ce que vous nous dites à propos de Client, c'est qu'il crée à la fois Session et Socket, rien de plus. Si Client doit utiliser les deux, alors il n'y a pas de violation. Si elle crée seulement Socket afin de le fournir à Session, je dirais que est une violation et Session devrait obtenir Socket lui-même.

+0

Le client contient des objets internes qui se connectent au serveur. Une fois la connexion établie, j'ai actuellement une fonction qui retourne une nouvelle socket. L'objet session accepte un client et dans le ctor il appelle la fonction qui crée le nouveau socket pour cette session. Est-ce que cela devrait être changé? Si c'est le cas, comment? –

+0

Encore une fois, si 'Client' n'utilise pas le socket, la création du socket devrait probablement être déplacée dans' Session'. – Oded

+0

Mais toutes les données requises pour créer un socket sont sur le client puisque les internes qui se connectent au serveur sont également utilisés pour créer un socket (c'est un donné de ma bibliothèque réseau). Je ne peux pas ignorer la classe client car elle suit les sessions. –