2012-03-11 4 views
0

У меня есть ситуация, когда у меня есть два типа клиентов. Человек и организация. Есть некоторые атрибуты, которые Person не имеет для этой организации (например: имя, фамилия и т. Д.). Тогда есть некоторые атрибуты организации, которые Личность не нуждается (например: Название Компании и т. Д.). Но в области программного обеспечения Person и Company являются клиентами.Что такое масштабируемый способ создания этой модели домена NHibernate

Вопрос: Лучше ли вы сбросить все атрибуты в одном доменном объекте под названием Клиент и провести различие между человеком и организацией, используя bool, например IsOrganization? OR Лучше иметь класс домена Person, класс домена домена и класс домена Customer, который содержит свойства Person и Organization.

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

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

ответ

1

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

Насколько как установить это в базе данных, так что NHibernate может отобразить эту иерархию наследования от схемы данных к объектной модели, у вас есть три варианта:

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

Они описаны далее в nHibernate documentation

0

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

+0

Итак, если у меня есть таблицы на человека и организацию .. я не смогу использовать идентификатор (автоинкремент) в качестве номера клиента в приложении. Правильно? – Perpetualcoder

Смежные вопросы