2009-06-22 4 views
1

Я создаю код для 2D-графика сцены, и у меня есть один абстрактный класс, узел, который будет использоваться для указания того, что тип элемента может использоваться в графе сцены. Однако классы, которые реализуются из этого, имеют разные типы, такие как листовые узлы и узлы преобразования. Как бы я указал эти различия? я бы использовал атрибуты, другие интерфейсы или что?Как я могу указать на различия в этой ситуации?

Редактировать: Похоже, что я дал недостаточно информации. Вот как можно больше информации, как я могу предоставить на моей нынешней иерархии:

  • интерфейс INode
    • требует Матрицу под названием TransformationMatrix
    • требует Список Inodes называется Дети
    • требует Узла называется Parent
    • требует, чтобы метод был реализован как Draw, который принимает одну матрицу в качестве аргумента и ничего не возвращает
  • класс Node
    • реализует интерфейс INode
    • Draw вызов (виртуальный вакуум с 1 аргументом типа матрицы) просто вызывает у каждого ребенка метод Draw INode в.
  • различные классы, производные от узла
    • эти фактические узлы и могут быть узлы трансформации, листовые узлы и т.д.
+0

Это может немного помочь: http://blogs.msdn.com/ericlippert/archive/2009/02/02/properties-vs-attributes.aspx –

+0

Это, казалось бы, указывает, что я использую атрибуты (я пытаясь указать, какой тип узла имеют производные классы), однако я не совсем уверен, что это лучший вариант. – RCIX

+0

Является ли тип узла фактом о механизме класса или фактом того, что класс используется для представления? –

ответ

0

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

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

Основываясь на именах, мы можем предположить, что узел преобразования является «трансформируемым» и поэтому имеет метод «Преобразование», но лист не является трансформируемым. Я бы предположил тогда, что лучше для листового узла не иметь метода преобразования и быть в другом классе.