Я моделирую класс документа для системы.Документ может быть одного из двух типов: в или в .
Если тип в , у документа есть отправитель.Отправитель может быть одного из двух типов: человек или компания.
Если тип out , документ имеет получателя.Получатель может быть одного из трех типов: человек, компания, отдел.
Я не уверен, что было бы лучше использовать свойство с перечислением для типа документа или использовать иерархию с базовым классом документа и двумя классами для каждого типа документа.
Для отправителя и получателя я не уверен, что иерархия будет хорошим вариантом, потому что эти три типа не имеют ничего общего (человек, компания, отдел) и как избежать неверного отправителя.
Было бы хорошо, если бы вы могли дать мне несколько советов о том, как смоделировать класс документа, или если бы вы могли рассказать мне о некоторых шаблонах проектирования, которые я должен использовать.
Заранее спасибо.
Есть только несколько различий между входами и выходами, одинаковыми полями, за исключением отправителя и получателя.Кроме того, поведение такое же с небольшими изменениями.
Для отправителя и получателя не существует поведения, единственное, что им нужно сделать, это содержать правильный объект, например, отправитель может содержать человека или компанию, нонет отдела, потому что отделы не являются действительными отправителями.Кроме того, если отправитель содержит человека, он не может содержать компанию, поскольку принимается только один отправитель.
Основная проблема заключается в том, как прочитать отправителя или получателя, когда я получаю документ, и мне нужно прочитать эти данные.Например, если мне нужно прочитать отправителя, и я использую перечисление с типом отправителя, я должен сделать код, подобный этому, если отправитель == человек, прочитавший человека, и назначить его другому человеку, читающему компанию и назначающему компании.Если я использую наследование, как я избегаю использовать приведение или как я узнаю, является ли отправитель человеком или компанией без такого большого количества кода или преобразования.Еще раз спасибо.