Даны следующие сущности:
Контейнер
Пользователь
Клиент
Учреждение
Сущность Контейнер имеет связь с одной или несколькими сторонами через свойство AssignedToParties.
Container.AssignedToParties может содержать сочетание пользователей, клиентов и учреждений.
Какова модель рекомендованного домена для этого отношения.
Я рассмотрел следующие варианты:
1) Создайте отдельные свойства для каждого типа:
Container.AssignedToUsers
Container.AssignedToClients
Container.AssignedToInstitutions
Это выглядит довольно не элегантно, но не требует бизнес-логики для проверки типов или выполнения какого-либо сокращения.
2) Создать общий базовый класс "Сторона" для пользователя / клиента / учреждения
Container.AssignedToParties будет тогда набором объектов Стороны. Это кажется неправильным решением, так как базовый класс партии не будет иметь никаких методов или свойств. Я также не уверен, что мне нравится идея добавить еще один слой наследования.
Это решение, как и # 3, потребует, чтобы система проверяла типы во время выполнения для принятия решений и затем передавала их либо пользователю / клиенту / учреждению для их обработки.
3) Создать интерфейс маркера IContainer. Назначить, что пользователь / клиент / учреждение реализует
Это, по крайней мере, обеспечит некоторую безопасность типов, но потребует проверки типов и снижения производительности.
Прямо сейчас я склоняюсь к # 3. Это кажется самым простым, но я прочитал в нескольких местах, что, если ваш код работает с логикой, которая должна проверять определенный тип и пониженную версию, у вас, вероятно, плохой дизайн.
Любой совет приветствуется.