Что является масштабируемым способом создания этой модели домена NHibernate? - PullRequest
0 голосов
/ 11 марта 2012

У меня есть ситуация, когда у меня есть два типа клиентов. Человек и организация. Есть некоторые атрибуты, которые Person не имеет в организации (например, Имя, Фамилия и т. Д.). Кроме того, есть некоторые атрибуты организации, которые не нужны Person (например, название компании и т. Д.). Но в области программного обеспечения клиенты и Компания являются клиентами.

Вопрос: лучше ли создавать дамп всех атрибутов в одном доменном объекте под названием Customer и различать между person и org, используя bool типа IsOrganization ?? ИЛИ ЖЕ Лучше иметь класс домена Person, класс домена Organization и класс домена Customer, который содержит свойства Person и Organization.

Я чувствую, что последний путь, но я открыт для идей. Отношение клиент - человек - от 0 до n, где n = 1 Отношения между клиентом и организацией также составляют от 0 до n, где n = 1

Если это поможет, я использую NHibernate и FluentNHibernate. Принимая код первый подход.

Ответы [ 2 ]

1 голос
/ 11 марта 2012

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

Что касается того, как настроить это в базе данных, чтобы nHibernate мог отобразить эту иерархию наследования из схемы данных в объектную модель, у вас есть три варианта:

1) table per class hierarchy
2) table per subclass
3) table per concrete class

Они описаны далее в документации nHibernate

0 голосов
/ 12 марта 2012

Лучше иметь классы Person и Organization и интерфейс ICustomer, который определяет контракт для общих свойств и методов. Наследование не является хорошим выбором, потому что между двумя классами нет отношения «есть».

...