Хранить класс поведения с помощью nHibernate - PullRequest
1 голос
/ 15 февраля 2012

Хотелось бы узнать, есть ли способ хранить классы только с поведением в базе данных с помощью nHibernate. Что я имею в виду. У меня есть решение, в котором я использовал шаблон декоратора, что-то вроде на диаграмме классов enter image description here

Вот проблема, которую я пытаюсь решить. У меня есть класс ClassWithStoredBehaviorInProperty и свойство DesiredBehavior типа IBehavior. Где-то еще я путаю поведение, например var beh = new FlyBehavior(new WalkBehavior(new BatmanBehavior)) и сохраните его в DesiredBehavior свойстве. И вот мой вопрос. Есть ли способ, как сохранить это в базе данных с помощью nHibernate, а затем загрузить его правильно, или я должен сделать некоторые обходные пути. Если это возможно, как отобразить это? Спасибо

1 Ответ

1 голос
/ 16 февраля 2012

Вы можете иметь иерархические структуры данных, обрабатываемые NHibernate. С точки зрения базы данных, шаблон Decorator - это просто иерархическая структура, в которой имеется только один дочерний узел, а не коллекция. Здесь есть некоторая вводная информация .

Таким образом, вы можете довольно легко отобразить подклассы той же иерархии, используя подход «таблица на иерархию классов», где каждый Декоратор становится строкой в ​​таблице и указывает на Внутренний Декоратор. В вашей таблице вы используете столбец дискриминатора, поэтому при извлечении из базы данных NHibernate знает, какой тип класса ему нужно создать. Очевидно, что «код», который реализует конкретное поведение, связанное с каждым Decorator, не будет жить в базе данных.

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