Je suis en train de concevoir un petit moteur de synchronisation d'annuaires qui peut prendre différents types de sources et gérer la synchronisation incrémentielle. J'ai défini une interface pour un DirectorySource qui ressemble actuellement à ceci:Modèle de conception pour les appels sensibles aux commandes
public interface IDirectorySource
{
IEnumerable<IDirectoryEntry> GetChanges(IList<string> attributes, IChangeToken token);
}
Je ne veux fournir un recenseur au lieu d'une liste afin d'être en mesure d'éviter l'allocation de mémoire inutile, mais mon problème est que je aussi voulez renvoyer un nouvel IChangeToken qui contient les nouvelles informations d'état nécessaires pour l'appel suivant à GetChanges (pour effectuer des mises à jour incrémentielles). Le changetoken doit être calculé après l'énumération est terminée puisque quelqu'un d'autre pourrait mettre à jour le répertoire entre différents appels. J'ai pensé à avoir un deuxième paramètre IChangeToken qui reçoit le nouveau jeton, mais cela ne me semble pas très agréable (et ne serait pas cohérent puisque le jeton serait retourné immédiatement mais ne pourrait pas être rempli tant que l'énumération ne sera pas terminé) .. Et j'ai pensé à retourner quelque chose comme une interface "IChangeSet" qui contient une méthode GetEnumerator et une méthode GetToken, mais le problème est toujours que les appels suivants à la méthode enumerator retourne des données différentes (et ont donc différentes changetokens).
Comment puis-je concevoir une interface qui rend "impossible" à un utilisateur de mon interface de l'utiliser incorrectement concernant mon énumérateur GetChanges et de récupérer le ChangeToken associé?
J'espère que ma question est logique ...;) .. J'ai eu du mal à comprendre ce titre à utiliser pour ma question ...;)
@Per: dans ce cas, vous aimeriez obtenir le même ordre d'idées, et dans lequel un autre un? – Vlad
Le jeton n'est (presque) jamais le même entre différents appels à GetChanges. Il est toujours calculé lorsque vous obtenez les modifications en cours depuis le dernier appel de synchronisation à GetChanges.Dans mes deux actuelles DirectorySource-implementationstests le jeton peut être un cookie de byte-array à partir d'un appel "DirSync" ou de la valeur usnChanged d'un contrôleur de domaine (en fait c'est un horodatage). Je ne sais pas si cette réponse a du sens? ;) – Per