Conseils en Conception / Architecture
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:
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.
@+