Что было бы хорошим способом смоделировать это
это имеет смысл из доменной модели
перспектива?
Ваш третий вариант звучит лучше всего благодаря своей простоте:
Person.PhoneNumbers // a list of phone numbers
PhoneNumber.Person // references its parent
Как мне избежать неуместного
свойства (DisplayOrder on Person)
или условно заселенные объекты?
Является ли DisplayOrder
произвольным или в него встроен какой-либо домен, например, дата его замены новым номером телефона? Если так, я бы изменил атрибут, чтобы он выражал это значение. То есть не храните порядок отображения в вашей базе данных, сохраняйте информацию, необходимую для построения правильного порядка отображения, и пусть ваши представления упорядочивают их, возможно, используя стратегию, определенную в модели вашего домена. (Например, StandardDisplayOrderStrategy может показывать 1) домашние номера, 2) рабочие номера, затем 3) мобильные номера.)
Что касается условно заполненных свойств, рассмотрите возможность их заполнения все время.