Toujours s'exprimer dans le domaine d'application
Juste un petit post pour pousser une gueulante contre une mauvaise habitude assez répandue chez les programmeurs : utiliser une interface de style .Net pour accéder à un format de fichier.Par exemple un format structurel de ce type :
Root
{
Attribut1=1;
Attribut2=3;
MyVector
{
X=0;
Y=1;
Z=2;
}
}
sera souvent accédé de la manière suivante :
CAttribut MyAttribut1 = MonDocument.RootElement.GetAttribute("Attribut1");
CAttribut MyAttribut2 = MonDocument.RootElement.GetAttribute("Attribut2");
printf("%d %d n", MyAttribut1.GetValueInt(), MyAttribut2.GetValueInt());
CElement MyVectorElem = MonDocument.RootElement.GetChildEntry("MyVector");
CAttribut MyX = MyVectorElem.GetAttribute("X");
CAttribut MyY = MyVectorElem.GetAttribute("Y");
CAttribut MyZ = MyVectorElem.GetAttribute("Z");
printf("%f %f %f n", MyX.GetValueSingle(), MyY.GetValueSingle(), MyZ.GetValueSingle());
Cette écriture est à la fois verbeuse et lente. C'est pourquoi je préfère de loin ceci :
struct SMyFormat
{
int m_Attribut1;
int m_Attribut2;
Vector3D m_MyVector;
};
SMyFormat const & MyRootElem = MonDocument.GetRootEntryAs<SMyFormat>();
printf("%d %d n", MyRootElem.m_Attribute1, MyRootElem.m_Attribute2);
printf("%f %f %f n", MyRootElem.m_MyVector().m_X, MyRootElem.m_MyVector().m_Y, MyRootElem.m_MyVector().m_Z);
Cette solution requière 3 lignes de code contre 8 pour la précédente.
Il existe tout de même beaucoup d'API qui ont bien compris cela :
- http://www.codesynthesis.com : C++,
- EMF de Eclipse : Java,
- DataSet Visual Studio : C#.

Commentaires