Плохо ли использовать строковые литералы в выражениях xpath? - PullRequest
2 голосов
/ 13 ноября 2009

В настоящее время я использую строковые литералы в своих выражениях xpath. Например:

paragraphList = root.SelectNodes("paragraph");

Я знаю, что в целом следует избегать использования литеральных значений, но я полагаю, что это безопасно, поскольку имена ваших узлов xml редко меняются. Это плохая практика, или я такой же?

Ответы [ 2 ]

2 голосов
/ 11 декабря 2010

Мое общее правило: НИКОГДА не используйте строковые литералы. Я думаю, что использование строковых литералов дает много преимуществ, пару из которых уже упоминал Бенджамин Кокс.

  1. Централизация : Если все ваши строковые литералы заменены статическими строковыми константами (в идеале все они должны быть сгруппированы в одном месте, возможно, на уровне файлов), то вы точно знаете, где найти все ваши строковые ссылки. Кроме того, некоторые компиляторы предлагают удобные функции, такие как «Перейти к определению» для быстрого доступа к ним.

  2. Ремонтопригодность : В результате 1 легко увидеть, что в случае необходимости вы можете изменять строковые ссылки в одном месте, и эти изменения немедленно отражаются в вашем коде.

  3. Эффективность : память выделяется только один раз для каждой уникальной ссылки на строку, которую вы создаете, поэтому вы не выделяете в память новые строки постоянно, как вы это делаете, когда вы все время используете один и тот же строковый литерал место. (Некоторые языки, такие как Ruby, могут автоматически обрабатывать этот случай, поощряя использование символов вместо строк.)

  4. Удобочитаемость : Особенно, если ваши строковые литералы немного загадочны, легче читать статическую переменную с соответствующим именем: kCapturedImageDirectoryFormat, а не "capture-%.0f.tmp"

1 голос
/ 13 ноября 2009

Что ж, принцип, лежащий в основе концепции избегания литералов, - это удобство обслуживания. Так что спросите себя, каковы последствия ремонтопригодности каждого решения.

В этом случае меняется с

paragraphList = root.SelectNodes("paragraph");

до

paragraphList = root.SelectNodes(PARAGRAPH_TAG);

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

То, что я, вероятно, сделал бы (предполагая, что вы касаетесь только кода), это сначала используйте строковые литералы, но как только у вас появится второе использование любой данной строки, превратите ее в константу.

Опять же, если вы используете плагин ReSharper для Visual Studio, вы можете использовать рефакторинг «Ввести поле» с простой комбинацией клавиш, чтобы лень не весила так много :-)

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