У меня есть частный член типа List<T>
, где T
- это объекты с богатым доменом. Домен в моем приложении содержит много методов, которые ожидают T
.Публикация списка <объекты домена> через IList <interface>
Я хочу представить публичное имущество типа IList<IT>
где T : IT
. IT
имеет небольшой размер, который реализуется DTO.
Поскольку я не могу отличить List<T>
до IList<IT>
Я прибегаю к использованию List<T>.ConvertAll
в объявлении собственности.
Это лучший способ сделать это? Быстрее, элегантнее?
Редактировать, чтобы обеспечить дополнительные детали
T
являются базовым классом, для которого ряд производных классов существует, и каждый из этих производных классов происходит во многих различных вкусах (конфигураций загружены во время выполнения). Пользователь на уровне презентации может добавлять/изменять/удалять любые экземпляры этих производных классов любой конфигурации. Экземпляры также могут быть привязаны друг к другу друг с другом, но существуют некоторые сложные правила, которые определяют, какие ссылки разрешены; некоторые из которых известны во время компиляции, некоторые из которых известны только во время выполнения (на основе конфигураций). Некоторые экземпляры могут быть двусвязными, некоторые сшитые, некоторые только одно в любом направлении, некоторые - только в одном направлении, а некоторые - нет.
Для этого T
содержит список допустимых целей для любых таких ссылок. Уровень презентации графически выделяет эти допустимые цели и не позволяет связывать, если цели не находятся в допустимом списке. Когда какой-либо экземпляр создается, изменяется или удаляется, список ValidTargets каждого экземпляра нуждается в переоценке и может измениться.
В классе T
существует множество других членов и методов, которые будут функционировать на фабриках и классах услуг. Некоторые ведут себя очень похоже на пример выше. Ни одна из них не должна открываться вне сборки.
Нужно ли его изменять? – SLaks
Стефан, а также @SLaks намекнул. Это зависит от того, что вы ожидаете от клиентов на самом деле с этим списком. Разрешено ли им добавлять к нему или удалять из него? Разделяется ли она между несколькими клиентами? Представляет ли он концепцию домена сама по себе (например, команда, запрос, ...)? и т. д. Это зависит от вашего варианта использования. – Alex
Если ваш список * * readonly, вы можете использовать IReadOnlyList. –
zmbq