1

アプリのデータベースと同じインスタンスに存在するデータベースで毎晩更新されるデータがあります。したがって、データベース呼び出しを節約するために、この 1 日の静的データを List(Of MyObject) にキャッシュしたいと考えています。理論的な観点から、このキャッシュされた List(Of ) は、グローバル変数を介してプレゼンテーション層コードにキャッシュされるべきですか? .DLL のグローバル変数に入れる必要がありますか?

GUIに公開され、.DLL内のデータアクセスレイヤーを呼び出すサービスレイヤーを作成したため、.DLLで考えています。

Public Shared Function Search(ByVal criteria As Core.Other.Customer) As List(Of Core.Other.Customer)
    ' TODO: Check the customer cache to see if it has been populated yet. If not, populate it.
    If 1 = 1 Then
        ' TODO: Variable "list" needs to be a global object in the DLL.
        ' For SO readers: Dal class declared Friend.
        Dim list As List(Of Core.Other.Customer) = Dal.Search.Customers.GetCache()
    End If

    Dim results As New List(Of Core.Other.Customer)
    ' TODO: Find the relevant customers in the cache and add them to variable "results".
    Return results
End Function

私はこれを最善の方法で行っていますか?

4

3 に答える 3

3

これをサービスレイヤーにキャッシュする傾向があります。私は自分のデータ アクセスをシンプルに保ちたい (通常は NHibernate のような OR/M を使用する) ので、データ アクセス レイヤーがどのように機能するかについての私の期待を変えるような間抜けなことはしたくありません (開発者として、私はすべてを期待します)。 OR'M のキャッシュでない限り、実際に DB をヒットするために DAL を呼び出します。これは実装の詳細であり、私は気にしません)。

サービスは適切な場所のようです (そして、データをキャッシュするときは、それが役立つ場合は、アプリでそれを実行します)。

于 2009-02-27T16:10:20.960 に答える
2

あなたの List(Of x) は何らかの処理を必要としますか、それともデータベースから引き出された単なる生データですか?

データベースから取り出された単なる生データである場合は、データ アクセス レイヤーでキャッシュすることをお勧めします。

ただし、処理が必要な場合は、ビジネス ロジック レイヤーで行う必要があります。

プレゼンテーション コードと .DLL について言及しているので、たまたまn 層アーキテクチャを意味していましたか?

于 2009-02-27T15:54:13.777 に答える
0

キャッシュせずに実行して、パフォーマンス/ネットワークの問題があるかどうかを確認することを検討してください。これは時期尚早の最適化でしょうか?

于 2009-02-27T15:50:05.020 に答える