Как строго ввести свойства в JavaScript, которые сопоставляются с моделями в C #? - PullRequest
0 голосов
/ 07 апреля 2010

Я даже не уверен, правильно ли я сформулировал вопрос, но постараюсь объяснить как можно яснее на примере:

В следующем примере сценария:

1) Возьмите такой класс, как этот:

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

2) Сериализуйте это в JSON, передайте по проводнику в браузер.

3) Браузер десериализует это и превращает JSON в объект JavaScript, чтобы вы могли затем обращаться к таким свойствам:

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

Что если теперь новый разработчик приступит к работе над этим проектом, решит, что firstName больше не является подходящим именем свойства. Допустим, они используют ReSharper для переименования этого свойства, поскольку ReSharper довольно неплохо справляется с поиском (почти) всех ссылок на свойство и соответствующим образом переименовывает их.

Однако ReSharper не сможет переименовать ссылки в коде JavaScript (# 3), так как он не может знать, что они действительно означают одно и то же. Это означает, что на программиста остается обязанность вручную находить эти ссылки и переименовывать их тоже.

Риск состоит в том, что если об этом забудут, никто не узнает об этой ошибке, пока кто-то не проверит эту часть кода, или, что еще хуже, проскользнет к клиенту.


Вернуться к актуальному вопросу: Я пытался придумать решение этой проблемы для некоторых, как сильно печатать имена этих свойств при использовании в javascript, чтобы такой инструмент, как ReSharper, мог успешно переименовать ВСЕ использования этого свойства (и точно)?

Вот то, о чем я думал, например (это, очевидно, не сработает, если я не сделаю какие-то статические свойства)

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

Но это, очевидно, не практично. У кого-нибудь есть мысли по этому поводу?
Спасибо и благодарность всем талантливым людям, отвечающим на вопросы на этом сайте.

Это мой эксперимент, так что любые предложения приветствуются.

1 Ответ

1 голос
/ 07 апреля 2010

У большинства инструментов рефакторинга есть режим, в котором они проверяют полнотекстовый поиск по базе кода, чтобы найти использования. (Я знаю, что у ReSharper есть такая возможность.) Это решит хотя бы часть проблемы. Комплексные интеграционные тесты также могут помочь решить некоторые из упомянутых вами проблем.

Другим способом решения этой проблемы было бы менее тесное соединение вашего проводного формата (т. Е. JSON) и иерархии типов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...