Кэширование для одного свойства или метода в .NET - PullRequest
3 голосов
/ 24 августа 2010

Использование VB.NET на этом, в веб-формах ASP.NET.

У меня есть свойство, которое читает список из базы данных через структуру сущностей следующим образом:

Public ReadOnly Property MyProperty As List(Of MyType)
    Get
        Using service As New MyDatabaseService
            Return service.GetMyTypeList()
        End Using
    End Get
End Property

Поскольку для этой службы требуется обратное обращение к базе данных, я хотел бы кэшировать результаты для будущих обращений в течение того же жизненного цикла страницы (ViewState не требуется). Я знаю, что это можно сделать следующим образом:

Private Property _myProperty As List(Of MyType)
Public ReadOnly Property MyProperty As List(Of MyType)
    Get
        If _myProperty Is Nothing Then
            Using service As New MyDatabaseService
                _myProperty = service.GetMyTypeList()
            End Using
        End If

        Return _myProperty
    End Get
End Property

Теперь вопрос: есть ли способ использовать кэширование через атрибут, чтобы «автоматически» кэшировать выходные данные этого свойства, без необходимости явного объявления, проверки и установки кэшированного объекта, как показано?

1 Ответ

1 голос
/ 24 августа 2010

Ответ вроде , но вам нужно будет использовать Аспектно-ориентированное программирование для достижения этой цели. Castle Windsor или PostSharp - это две отличные .net-среды, которые могут помочь вам в этом, но это не легкий вопрос.объединить общие функциональные возможности в аспекты, которые можно использовать для декорирования кода, оставляя только суть того, что вы хотите.Это можно сделать динамически во время выполнения, как это делает Castle, или во время компиляции с помощью ткачества IL (динамическая компиляция нового кода в вашу сборку).

У каждого подхода есть свои сильные и слабые стороны, но я призываю вас исследовать эту тему, поскольку она охватывает не только кеширование.Многие распространенные задачи, такие как обработка исключений и ведение журнала, можно легко преобразовать в аспекты, чтобы сделать ваш код более чистым.

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