Понятно и просто: если есть какой-либо код, который нужно совместно использовать в нескольких местах, он должен перейти в другой класс, который можно использовать в качестве зависимости, где это необходимо. Перечисленные зависимости не кажутся слишком большими, хотя вам следует тщательно продумать, нужна ли вам зависимость от HttpContext
. Большую часть времени вам следует просто передать какое-то значение методу. Например, если вам нужно работать с идентификатором пользователя, передайте идентификатор пользователя в метод вашего вспомогательного класса, вместо того, чтобы заставить вспомогательный класс получить зависимость от HttpContext
и получить сам идентификатор.
Если у вас все еще слишком много зависимостей, то вы, вероятно, нарушаете принцип единой ответственности. Вам может понадобиться несколько вспомогательных классов или совершенно другая стратегия. Трудно сказать что-то определенное, не зная точно, что вы делаете.
Один корректный ответ:
/a/b/*[self::c or self::d or self::e]
Действительно обратите внимание что это
a/b/*[local-name()='c' or local-name()='d' or local-name()='e']
является и слишком длинным и неправильным. Это выражение XPath выберет узлы как:
OhMy:c
NotWanted:d
QuiteDifferent:e
Можно избежать повторения с тестом атрибута вместо этого:
a/b/*[local-name()='c' or local-name()='d' or local-name()='e']
Вопреки антагонистическому мнению Dimitre вышеупомянутое весьма корректно в вакууме, где OP не указал взаимодействие с пространствами имен. self::
ось является строгим пространством имен, local-name()
не. Если намерение OP состоит в том, чтобы получить c|d|e
независимо от пространства имен (то, которое я предложил бы, является даже вероятным сценарием, данным ИЛИ природа проблемы) затем это - "другой ответ, который все еще имеет некоторые положительные голоса", который является неправильным.
Вы не можете быть категоричными без определения, хотя я довольно рад удалить свой ответ как по-настоящему неправильный, если OP разъясняет его вопрос, таким образом, что я являюсь неправильным.
Не уверенный, если бы это помогает, но с XSL, я сделал бы что-то как:
<xsl:for-each select="a/b">
<xsl:value-of select="c"/>
<xsl:value-of select="d"/>
<xsl:value-of select="e"/>
</xsl:for-each>
и не будет этот XPath выбирать всех детей узлов B:
a/b/*