2010-04-07 3 views
0

Je ne suis même pas sûr si je LIBELLEES la bonne question, mais je vais essayer d'expliquer aussi clairement que possible avec un exemple:Comment taper fortement les propriétés en JavaScript qui correspondent aux modèles en C#?

Dans le scénario exemple suivant:

1) Prenez une classe telle comme ceci:

public class foo 
{ 
    public string firstName {get;set;} 
    public string lastName {get;set} 
} 

2) qui sérialiser en JSON, passer sur le fil pour le navigateur.

3) Navigateur de-sérialise cela et transforme le JSON en un objet JavaScript afin que vous pouvez accéder aux propriétés comme ceci:

var foo = deSerialize("*******the JSON from above**************"); 
alert(foo.firstName); 
alert(foo.lastName); 

Et si maintenant un nouveau développeur vient de travailler sur ce projet décide que firstName n'est plus un nom de propriété approprié. Disons qu'ils utilisent ReSharper pour renommer cette propriété, puisque ReSharper fait un très bon travail à trouver (presque) toutes les références à la propriété et de les renommer de manière appropriée.

Cependant ReSharper ne sera pas en mesure de renommer les références dans le code JavaScript (# 3) car il n'a aucun moyen de savoir que ceux-ci signifient aussi vraiment la même chose. Ce qui signifie que le programmeur a la responsabilité de trouver manuellement ces références et de les renommer aussi. Le risque est que si cela est oublié, personne ne saura que cette erreur est survenue jusqu'à ce que quelqu'un teste cette partie du code, ou pire, que le client en soit informé.


Retour à la question réelle: Je suis en train de penser à une solution à cela d'une façon typer ces noms de propriétés lorsqu'il est utilisé en javascript, de sorte qu'un outil comme ReSharper peut renommer avec succès ALL usages de la propriété (et avec précision)?

Voici ce que je pensais par exemple (ce serait évidemment pas fonctionner à moins que je fais une sorte de propriétés statiques)

var foo = deSerialize("*******the JSON from above**************"); 
alert(foo.<%=foo.firstName.GetPropertyName()%>) 
alert(foo.<%=foo.lastName.GetPropertyName()%>) 

Mais ce n'est évidemment pas pratique. Quelqu'un at-il des idées à ce sujet?
Merci, et bravo à toutes les personnes talentueuses qui répondent aux questions sur ce site.

Ceci est une sorte de mon expérience, donc toutes les suggestions seraient les bienvenues.

Répondre

1

La plupart des outils de refactoring ont un mode dans lequel ils examinent une recherche en texte intégral de la base de code pour trouver des utilisations. (Je sais que ReSharper a cette option.) Cela résoudrait au moins une partie du problème. Des tests d'intégration complets permettraient également de résoudre certains des problèmes que vous mentionnez. Une autre façon de résoudre le problème consiste à coupler moins étroitement votre format de fil (c'est-à-dire le JSON) et votre hiérarchie de types.

+0

Oui ReSharper a cette option, mais il n'a pas pu la trouver dans mon cas. Aussi, même si c'est le cas, il peut confondre d'autres utilisations de cette chaîne même si cela n'a rien à voir avec cela.Je suis d'accord avec vous sur les tests d'intégration, mais je voulais essayer de résoudre le problème à la source plutôt que d'attendre un test pour révéler le problème. Pas un gros problème, c'est plus d'une expérience. – 7wp

+0

Ensuite, je me tiendrai par des conseils sur la dernière ligne: plutôt que de coupler votre JSON à votre système de type, inventez une convention distincte pour le JSON que le C# et le JS comprennent, et cela ne sera affecté que si quelqu'un fait délibérément changer pour cela. –

+0

Oui, mais quand quelqu'un y apporte un changement délibéré, ne se retrouverait-il pas dans le même genre de scénario que je l'ai indiqué? Surtout si elle est utilisée dans de nombreux endroits répartis partout? – 7wp

Questions connexes