Dans mon application, j'ai beaucoup de classes. La plupart de ces classes stockent certaines données, et il est important que les autres modules de mon application soient également 'mis à jour' si le contenu de l'une des classes de données change.Différentes façons d'observer les changements de données
La façon typique de le faire est comme ceci:
void MyDataClass::setMember(double d)
{
m_member = d;
notifyAllObservers();
}
Cette méthode est assez bon si le membre est pas souvent changé et les besoins des «classes d'observation de d'être mise à jour aussi vite possible.
Une autre façon d'observer les changements est la suivante:
void MyDataClass::setMember(double d)
{
setDirty();
m_member = d;
}
Ceci est une bonne méthode si le membre est changé plusieurs fois, et l'aspect « cours d'observation » à intervalles réguliers à tous les cas « sales ».
Malheureusement, j'ai un mélange des deux types de membres de données dans mes classes. Certains sont changés pas si souvent (et je peux vivre avec des observateurs normaux), d'autres sont changés plusieurs fois (c'est dans des algorithmes mathématiques complexes) et appellent les observateurs chaque fois que les changements de valeur vont tuer les performances de mon application.
Existe-t-il d'autres astuces pour observer les modifications de données ou des modèles dans lesquels vous pouvez facilement combiner plusieurs méthodes différentes d'observation des modifications de données?
Bien que ce soit une question plutôt indépendante de la langue (et je peux essayer de comprendre des exemples dans d'autres langages), la solution finale devrait fonctionner en C++.
Impressionnant. +1 – Patrick
Nouvelle question sur le même thème (par Patrick): http://stackoverflow.com/questions/3667317/best-way-to-keep-the-user-interface-up-to-date où il remarque que générer simplement un beaucoup d'événements peuvent tuer des spectacles. –