Хранить вложенные коллекции (отфильтрованные версии основной коллекции) внутри коллекции как кеш? - PullRequest
0 голосов
/ 15 января 2010

Является ли хорошей практикой хранение вложенных коллекций элемента X внутри родительской коллекции элемента X для кэширования «фильтров-запросов», которые выполняются в родительской коллекции? (Они не будут использоваться вместе (как в цвете И типе).) Или это также нормально, просто перебрать коллекцию и вернуть правильные объекты во временную коллекцию?

Class ItemCollection : Inherits Collection(Of Item)
    Private _types as New List(Of ItemCollection) //Cache

    Function FilterByType(type) As ItemCollection
        If Not _types.KeyExists(type) Then
            _types.Add(type, New ItemCollection())
            For Each i in Me
                If i.Type = type Then _types(type).Add(i)
            Next
        End If
        Return _types(type)
    End Function

    //Same for FilterByColor(color)
End Class

Class Item
    Public Color = "Blue"
    Public [Type] = "One"
End Class

1 Ответ

1 голос
/ 15 января 2010

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

filtered = Me.Where(i => i.Type = type)

(Я мог бы отказаться от точного синтаксиса, я никогда не делал LINQ в VB.NET, я парень на C #).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...