Bonjour,

j'ai besoin d'un conseil concernant l'architecture d'un programme en C++.

Ce Prog "prog_main" discute (sockets TCP/IP Client/Serveur) avec 3 types de programmes :
- les "prog_type1"
- les "prog_type2"
- les "prog_type3"
Le nombre d'instance de chacun de ces types de prog n'est pas défini à priori.
Chacun de ces 3 types de prog a ses spécificités.

Donc voilà comment j'ai abordé le truc.
J'ai crée une Classe Interface CIntTypeX pour chacun des 3 types de prog, et une classe CTypeX pour chaque type de prog.
Chacune des classes CTypeX dérive d'une classe CType, qui représente les données communes à chacun.

Ainsi mon programme CMain appelle et utilise les 3 interfaces CIntType1, CIntType2 et CIntType3 (qui sont des singleton), et ce sont elles qui se chargent de gérer leur liste de CTypeX

Exemple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
class CType1 : CType
{
private:
SOCKET m_skt;
....
public:
CType1() : CType(), m_skt(0) {};
Init();
 
//Envoi un message
void SendMsg(const std::string& msg)
{
     send(m_skt, msg.c_str, msg.size());
}
 
};
 
 
class CIntCType1
{
private :
std::list<CType1*> m_listCType1;
int m_data1;
CIntCType1() : m_data1(0) {}
 
public:
~CIntCType1() {}
 
static CIntCType1& GetInterface1 {
static CIntCType1 inst;
return inst;
 
//Envoi un message au prog CType1 n° "num"
void SendMsg(const std::string& msg, int num)
{
CType1* pProg = GetProg(num);
pProg->SendMsg(msg);
}
 
//Récupère le prog CType1 n° num de la liste
CType1* GetProg(int num)
{
//parcours de la liste avec un find_if + prédicat
}
 
...
...
};
Est-ce que j'ai été assez clair ?

Que pensez-vous de cette façon de faire par rapport à la situation ??
Comment feriez-vous ?

Merci par avance.
@+