C'est un fait de la vie que les organisations ont différentes applications utilisant différentes versions des mêmes classes parce qu'elles ont été développées à des moments différents et ne peuvent pas suivre. C'est aussi un fait de la vie que ces applications ont souvent besoin de partager des données entre elles.
Vous pouvez le faire via la base de données. Cependant, c'est lent et non évolutif. Ce que vous voulez vraiment, c'est partager des objets via un cache distribué qui est rapide et évolutif. Mais, le partage d'objets à l'exécution soulève immédiatement la question de la compatibilité des versions.
Une façon de le faire est d'utiliser XML dans lequel vous pouvez transformer une version d'un objet en une autre. Mais c'est extrêmement lent. Une autre méthode consiste à implémenter votre propre transformation personnalisée qui prend une version d'objet et la transforme en une autre version. Mais, vous devez maintenir cela, ce qui représente beaucoup d'efforts pour vous.
Ne serait-il pas agréable que le cache distribué s'occupe d'une manière ou d'une autre de la compatibilité des versions pour vous ? Hé bien, NCache fait exactement cela. NCache vous fournit une transformation d'objet au niveau binaire entre différentes versions. Vous pouvez mapper différentes versions via un fichier de configuration XML et NCache comprend comment passer d'une version à une autre.
De plus, depuis NCache stocke toutes ces différentes versions dans un format binaire (plutôt que XML), la taille des données reste très compacte et petite et donc rapide. Dans un environnement à fort trafic, la taille de l'objet s'ajoute à une consommation de bande passante supplémentaire importante, qui a son propre coût qui lui est associé.
Voici un exemple de NCache config.ncconf avec mappage de version de classe :
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 |
<cache-config name="myInteropCache" inproc="False" config-id="0" last-modified="" type="clustered-cache" auto-start="False"> ... <data-sharing> <type id="1001" handle="Employee" portable="True"> <attribute-list> <attribute name="_Name" type="System.String" order="1"> <attribute name="_Age" type="System.Int32" order="2"> <attribute name="_Address" type="System.String" order="3"> <attribute name="_ID" type="System.String" order="4"> <attribute name="_PostalAddress" type="System.String" order="5"> </attribute></attribute></attribute></attribute></attribute></attribute-list> <class name="DataModel.Employee:1.0.0.0" handle-id="1" assembly="DataModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" type="net"> <attribute name="_Name" type="System.String" order="1"> <attribute name="_Age" type="System.Int32" order="2"> <attribute name="_Address" type="System.String" order="3"> </attribute></attribute></attribute></class> <class name="DataModel.Employee:2.0.0.0" handle-id="2" assembly="DataModel, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" type="net"> <attribute name="_ID" type="System.String" order="4"> <attribute name="_Name" type="System.String" order="1"> <attribute name="_Age" type="System.Int32" order="2"> <attribute name="_PostalAddress" type="System.String" order="3"> </attribute></attribute></attribute></attribute></class> </type> </data-sharing> ... </cache-config> |
Comment la NCache fais le?
Dans le fichier config.nconf que vous voyez ci-dessus, vous remarquerez que la classe Employee a un ensemble d'attributs définis en premier. Ce sont des attributs indépendants de la version et ils apparaissent dans toutes les versions. Il s'agit en fait d'un sur-ensemble de tous les attributs qui apparaissent dans différentes versions. En dessous, vous spécifiez des attributs spécifiques à la version et les mappez aux attributs indépendants de la version ci-dessus.
Supposons que vous ayez enregistré la version Employee 1.0.0.0, qui contient un sous-ensemble de la version Employee 2.0.0.0. Maintenant, lorsqu'une autre application essaie de récupérer le même employé, mais qu'elle veut le voir en tant que version 2.0.0.0, NCache sait quels attributs de la version 2.0.0.0 remplir avec des données et lesquels laisser vides.
Deuxièmement, dans l'exemple de configuration ci-dessus, vous remarquerez que la version 2.0.0.0 de l'employé ne contient pas le champ Adresse, même si la version 1.0.0.0 l'a. Donc, dans ce cas, quand NCache essaie de lire Employé 1.0.0.0 stocké dans le cache et tente de le transformer en Employé version 2.0.0.0, il sait qu'il ne faut pas copier le champ Adresse car il n'y figure pas dans cette version plus récente.
Il existe de nombreux autres scénarios qui NCache gère parfaitement pour vous. Veuillez lire la documentation du produit en ligne pour plus de détails à ce sujet.
Enfin, la meilleure partie de tout cela est que vous n'avez pas besoin d'écrire de code de sérialisation ni de modifier le code de votre application pour pouvoir l'utiliser. NCache fonction. NCache a implémenté un mécanisme de génération de code d'exécution, qui génère du code de sérialisation et de désérialisation en mémoire de vos classes lors de l'exécution, et utilise le formulaire compilé qui est très rapide.
En résumé, en utilisant NCache vous pouvez désormais partager différentes versions d'objets entre vos applications sans même modifier le code de votre application.