Шаблон стратегии с отражением типа, влияющий на выступления? - PullRequest
0 голосов
/ 30 апреля 2010

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

class Node {
    public BaseNodeBehavior Behavior {get; set;}
}

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

if (node.Behavior is NodeDataOutputBehavior)
    workOnOutputNode(node) ....

Мой график может содержать тысячи узлов.

  • Влияет ли отражение типа на производительность?
  • Должен лиЯ использую что-то еще, кроме паттерна стратегии?

Я использую стратегию, потому что мне нужно наследование поведения.Например, в основном, поведение может быть Data или Operator, поведение Data может быть IO, Const или Intermediate, и, наконец, поведение IO может быть Input или Output.

Так что, если я использую перечисление, я не смогучтобы проверить, что поведение узла относится к типу данных, мне нужно проверить, чтобы оно было [Input, Output, Const или Intermediate].И если позже я захочу добавить другое поведение типа данных, я облажался, каждый метод тестирования данных должен быть изменен.

Ответы [ 2 ]

2 голосов
/ 30 апреля 2010

if (node.Behavior is NodeDataOutputBehavior) это не отражение и очень быстро.

0 голосов
/ 01 мая 2010

Использование шаблона Visitor для различных режимов работы узла приведет к удалению проверки типа. Однако я бы сделал это, чтобы получить более чистый дизайн, а не производительность, поскольку я сомневаюсь, что будет существенная разница в производительности.

Шаблон Visitor работает хорошо, если типы поведения узла статичны во время компиляции. Когда вы добавляете новое поведение узла, вы добавляете новый метод в интерфейс Visitor, что означает, что компилятор отлавливает случаи, когда это поведение не обрабатывается.

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

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