Sdílet prostřednictvím


Ukládání dat do mezipaměti v architektuře (VB)

Scott Mitchell

Stáhnout PDF

V předchozím kurzu jsme se dozvěděli, jak použít ukládání do mezipaměti na prezentační vrstvě. V tomto kurzu se dozvíte, jak využít výhod naší vrstvené architektury k ukládání dat do mezipaměti ve vrstvě obchodní logiky. Provedeme to rozšířením architektury tak, aby zahrnovala vrstvu ukládání do mezipaměti.

Úvod

Jak jsme viděli v předchozím kurzu, ukládání dat ObjectDataSource do mezipaměti je stejně jednoduché jako nastavení několika vlastností. ObjectDataSource bohužel používá ukládání do mezipaměti na prezentační vrstvě, která těsně spojuje zásady ukládání do mezipaměti se stránkou ASP.NET. Jedním z důvodů pro vytvoření vrstvené architektury je umožnit přerušení těchto propojení. Například vrstva obchodní logiky odděluje obchodní logiku od ASP.NET stránek, zatímco vrstva přístupu k datům odděluje podrobnosti o přístupu k datům. Toto oddělení obchodní logiky a podrobností o přístupu k datům se upřednostňuje částečně proto, že systém je čitelnější, lépe udržovatelný a flexibilnější při změnách. Umožňuje také znalost domény a dělbu práce, kterou vývojář pracující na prezentační vrstvě nemusí znát s podrobnostmi databáze, aby mohl dělat svou práci. Oddělení zásad ukládání do mezipaměti od prezentační vrstvy nabízí podobné výhody.

V tomto kurzu rozšíříme naši architekturu o vrstvu ukládání do mezipaměti (zkráceně CL), která využívá naše zásady ukládání do mezipaměti. Vrstva ukládání do mezipaměti bude obsahovat ProductsCL třídu, která poskytuje přístup k informacím o produktu pomocí metod, jako GetProducts()jsou , GetProductsByCategoryID(categoryID)a tak dále, které se při vyvolání nejprve pokusí načíst data z mezipaměti. Pokud je mezipaměť prázdná, tyto metody vyvolají příslušnou ProductsBLL metodu v BLL, která by pak získala data z DAL. Metody ProductsCL ukládají data načtená z BLL před vrácením do mezipaměti.

Jak ukazuje obrázek 1, cl se nachází mezi vrstvami prezentace a obchodní logiky.

Vrstva ukládání do mezipaměti (CL) je další vrstvou v naší architektuře.

Obrázek 1: Vrstva ukládání do mezipaměti (CL) je další vrstvou v naší architektuře

Krok 1: Vytvoření tříd vrstev ukládání do mezipaměti

V tomto kurzu vytvoříme velmi jednoduchý cl s jednou třídou ProductsCL , která má jen několik metod. Vytvoření úplné vrstvy ukládání do mezipaměti pro celou aplikaci by vyžadovalo vytvoření CategoriesCLtříd , EmployeesCLa SuppliersCL a poskytnutí metody v těchto třídách vrstvy ukládání do mezipaměti pro každou metodu přístupu k datům nebo úpravu v BLL. Stejně jako u BLL a DAL, vrstva ukládání do mezipaměti by měla být v ideálním případě implementována jako samostatný projekt knihovny tříd; implementujeme ji však jako třídu ve App_Code složce.

Pokud chcete přesněji oddělit třídy CL od tříd DAL a BLL, vytvořte ve App_Code složce novou podsložku. Klikněte pravým tlačítkem na App_Code složku v Průzkumník řešení, zvolte Nová složka a pojmenujte novou složku CL. Po vytvoření této složky do ní přidejte novou třídu s názvem ProductsCL.vb.

Přidání nové složky s názvem CL a třídy s názvem ProductsCL.vb

Obrázek 2: Přidání nové složky s názvem a třídy s názvem CLProductsCL.vb

Třída ProductsCL by měla obsahovat stejnou sadu metod přístupu k datům a metod úprav, které najdete v odpovídající třídě vrstvy obchodní logiky (ProductsBLL). Nevytvořme všechny tyto metody, pojďme zde vytvořit pár, abyste získali přehled o vzorech používaných clem. Konkrétně přidáme GetProducts() metody a GetProductsByCategoryID(categoryID) v kroku 3 a UpdateProduct přetížení v kroku 4. Zbývající ProductsCL metody a třídy , EmployeesCLa CategoriesCLSuppliersCL můžete přidat podle svého volna.

Krok 2: Čtení a zápis do mezipaměti dat

Funkce ukládání do mezipaměti ObjectDataSource prozkoumáná v předchozím kurzu interně používá ASP.NET mezipaměť dat k ukládání dat načtených z BLL. K mezipaměti dat lze přistupovat také programově z tříd kódu ASP.NET stránek nebo z tříd v architektuře webových aplikací. Pokud chcete číst a zapisovat do mezipaměti dat z třídy kódu na pozadí ASP.NET stránky, použijte následující vzor:

' Read from the cache
Dim value as Object = Cache("key")
' Add a new item to the cache
Cache("key") = value
Cache.Insert(key, value)
Cache.Insert(key, value, CacheDependency)
Cache.Insert(key, value, CacheDependency, DateTime, TimeSpan)

Metoda Cache třídy s Insert má řadu přetížení. Cache("key") = value a Cache.Insert(key, value) jsou synonyma a oba přidají položku do mezipaměti pomocí zadaného klíče bez definovaného vypršení platnosti. Obvykle chceme určit vypršení platnosti při přidávání položky do mezipaměti, a to buď jako závislost, vypršení platnosti na základě času, nebo obojí. K poskytnutí informací o vypršení platnosti na základě závislosti nebo času použijte jedno z přetížení Insert metody.

Metody vrstvy ukládání do mezipaměti musí nejprve zkontrolovat, jestli jsou požadovaná data v mezipaměti, a pokud ano, vrátit je odtud. Pokud požadovaná data nejsou v mezipaměti, je nutné vyvolat příslušnou metodu BLL. Její návratová hodnota by měla být uložena do mezipaměti a pak vrácena, jak znázorňuje následující sekvenční diagram.

Metody ukládání vrstev do mezipaměti vracejí data z mezipaměti, pokud jsou k dispozici.

Obrázek 3: Metody vrstvy ukládání do mezipaměti vracejí data z mezipaměti, pokud jsou k dispozici

Pořadí znázorněné na obrázku 3 se provádí ve třídách CL pomocí následujícího vzoru:

Dim instance As Type = TryCast(Cache("key"), Type)
If instance Is Nothing Then
    instance = BllMethodToGetInstance()
    Cache.Insert(key, instance, ...)
End If
Return instance

Typ je typ dat uložených v mezipaměti Northwind.ProductsDataTable, například klíč je klíč, který jedinečně identifikuje položku mezipaměti. Pokud položka se zadaným klíčem není v mezipaměti, instance bude Nothing a data se načtou z příslušné metody BLL a přidají se do mezipaměti. V době Return instancedosažení instance obsahuje odkaz na data, a to buď z mezipaměti, nebo z BLL.

Při přístupu k datům z mezipaměti nezapomeňte použít výše uvedený vzor. Následující vzor, který na první pohled vypadá stejně, obsahuje drobný rozdíl, který představuje konflikt časování. Podmínky časování se obtížně ladí, protože se zobrazují jen občas a obtížně se reprodukují.

If Cache("key") Is Nothing Then
    Cache.Insert(key, BllMethodToGetInstance(), ...)
End If
Return Cache("key")

Rozdíl v tomto druhém, nesprávném fragmentu kódu spočívá v tom, že místo uložení odkazu na položku v mezipaměti do místní proměnné se k mezipaměti dat přistupuje přímo v podmíněném příkazu a v Return. Představte si, Cache("key") že při dosažení tohoto kódu není Nothing, ale před dosažením Return příkazu systém vyřadí klíč z mezipaměti. V tomto vzácném případě vrátí kód Nothing místo objektu očekávaného typu.

Poznámka

Mezipaměť dat je bezpečná pro přístup z více vláken, takže nemusíte synchronizovat přístup z vlákna pro jednoduché čtení nebo zápisy. Pokud ale potřebujete s daty v mezipaměti provést více operací, které musí být atomické, zodpovídáte za implementaci zámku nebo jiného mechanismu, který zajistí bezpečnost vláken. Další informace najdete v tématu Synchronizace přístupu k mezipaměti ASP.NET .

Položku je možné programově vyřadit z mezipaměti dat pomocí Remove metody takto:

Cache.Remove(key)

Krok 3: Vrácení informací o produktu zProductsCLtřídy

V tomto kurzu implementujme dvě metody pro vrácení informací o produktu z ProductsCL třídy: GetProducts() a GetProductsByCategoryID(categoryID). ProductsBL Stejně jako u třídy ve vrstvě obchodní logiky GetProducts() vrátí metoda v CL informace o všech produktech jako Northwind.ProductsDataTable objekt, zatímco GetProductsByCategoryID(categoryID) vrátí všechny produkty ze zadané kategorie.

Následující kód ukazuje část metod ve ProductsCL třídě:

<System.ComponentModel.DataObject()> _
Public Class ProductsCL
    Private _productsAPI As ProductsBLL = Nothing
    Protected ReadOnly Property API() As ProductsBLL
        Get
            If _productsAPI Is Nothing Then
                _productsAPI = New ProductsBLL()
            End If
            Return _productsAPI
        End Get
    End Property
    <System.ComponentModel.DataObjectMethodAttribute _
    (DataObjectMethodType.Select, True)> _
    Public Function GetProducts() As Northwind.ProductsDataTable
        Const rawKey As String = "Products"
        ' See if the item is in the cache
        Dim products As Northwind.ProductsDataTable = _
            TryCast(GetCacheItem(rawKey), Northwind.ProductsDataTable)
        If products Is Nothing Then
            ' Item not found in cache - retrieve it and insert it into the cache
            products = API.GetProducts()
            AddCacheItem(rawKey, products)
        End If
        Return products
    End Function
    <System.ComponentModel.DataObjectMethodAttribute _
        (DataObjectMethodType.Select, False)> _
    Public Function GetProductsByCategoryID(ByVal categoryID As Integer) _
        As Northwind.ProductsDataTable
        If (categoryID < 0) Then
            Return GetProducts()
        Else
            Dim rawKey As String = String.Concat("ProductsByCategory-", categoryID)
            ' See if the item is in the cache
            Dim products As Northwind.ProductsDataTable = _
                TryCast(GetCacheItem(rawKey), Northwind.ProductsDataTable)
            If products Is Nothing Then
                ' Item not found in cache - retrieve it and insert it into the cache
                products = API.GetProductsByCategoryID(categoryID)
                AddCacheItem(rawKey, products)
            End If
            Return products
        End If
    End Function
End Class

Nejprve si všimněte DataObject atributů a DataObjectMethodAttribute použitých na třídu a metody. Tyto atributy poskytují informace do průvodce ObjectDataSource s, které označují, jaké třídy a metody by se měly zobrazit v krocích průvodce s. Vzhledem k tomu, že třídy a metody CL budou přístupné z ObjectDataSource v prezentační vrstvě, přidal jsem tyto atributy pro zlepšení návrhu prostředí. Podrobnější popis těchto atributů a jejich účinků najdete v kurzu Vytvoření vrstvy obchodní logiky .

V metodách GetProducts() a GetProductsByCategoryID(categoryID) jsou data vrácená GetCacheItem(key) z metody přiřazena k místní proměnné. Metoda GetCacheItem(key) , kterou za chvíli prozkoumáme, vrátí konkrétní položku z mezipaměti na základě zadaného klíče. Pokud se v mezipaměti nenajdou žádná taková data, načtou se z odpovídající ProductsBLL metody třídy a pak se do mezipaměti přidají pomocí AddCacheItem(key, value) metody .

Metody GetCacheItem(key) a AddCacheItem(key, value) jsou v rozhraní s datovou mezipamětí, čtením a zápisem hodnot. Metoda GetCacheItem(key) je jednodušší z těchto dvou. Jednoduše vrátí hodnotu z třídy Cache pomocí předaného klíče:

Private Function GetCacheItem(ByVal rawKey As String) As Object
    Return HttpRuntime.Cache(GetCacheKey(rawKey))
End Function
Private ReadOnly MasterCacheKeyArray() As String = {"ProductsCache"}
Private Function GetCacheKey(ByVal cacheKey As String) As String
    Return String.Concat(MasterCacheKeyArray(0), "-", cacheKey)
End Function

GetCacheItem(key) nepoužívá hodnotu klíče , jak bylo zadáno, ale místo toho volá metodu GetCacheKey(key) , která vrátí klíč předem s ProductsCache-. Metoda MasterCacheKeyArraypoužívá také AddCacheItem(key, value) řetězec , který obsahuje řetězec ProductsCache, jak uvidíme na chvíli.

Z třídy kódu na pozadí ASP.NET stránky je možné přistupovat k mezipaměti dat pomocí Page vlastnosti třídy s Cachea umožňuje syntaxi, jako Cache("key") = valueje , jak je popsáno v kroku 2. Z třídy v rámci architektury je k mezipaměti dat přístup pomocí nebo HttpRuntime.CacheHttpContext.Current.Cache. Položka blogu Petera JohnsonaHttpRuntime.Cache vs. HttpContext.Current.Cache si všímá mírné výhody výkonu při použití HttpRuntime místo HttpContext.Current; v ProductsCL důsledku toho používá HttpRuntime.

Poznámka

Pokud je vaše architektura implementovaná pomocí projektů knihovny tříd, budete muset přidat odkaz na System.Web sestavení, aby bylo možné používat HttpRuntime třídy a HttpContext .

Pokud položka není nalezena v mezipaměti, ProductsCL metody třídy s načtou data z BLL a přidají je do mezipaměti pomocí AddCacheItem(key, value) metody . K přidání hodnoty do mezipaměti bychom mohli použít následující kód, který používá vypršení platnosti 60 sekund:

Const CacheDuration As Double = 60.0
Private Sub AddCacheItem(ByVal rawKey As String, ByVal value As Object)
    DataCache.Insert(GetCacheKey(rawKey), value, Nothing, _
        DateTime.Now.AddSeconds(CacheDuration), _
        System.Web.Caching.Cache.NoSlidingExpiration)
End Sub

DateTime.Now.AddSeconds(CacheDuration) určuje časový limit 60 sekund v budoucnu, zatímco System.Web.Caching.Cache.NoSlidingExpiration indikuje, že nedochází k žádnému posunu. I když má tato Insert metoda vstupní parametry pro absolutní i posuvné vypršení platnosti, můžete zadat pouze jeden z těchto dvou parametrů. Pokud se pokusíte zadat absolutní čas i časový rozsah, Insert metoda vyvolá ArgumentException výjimku.

Poznámka

Tato implementace metody má AddCacheItem(key, value) v současné době určité nedostatky. Tyto problémy vyřešíme a vyřešíme v kroku 4.

Krok 4: Zneplatnění mezipaměti při úpravě dat prostřednictvím architektury

Spolu s metodami načítání dat musí vrstva ukládání do mezipaměti poskytovat stejné metody jako BLL pro vkládání, aktualizaci a odstraňování dat. Metody úpravy dat CL s neupravují data uložená v mezipaměti, ale spíše volají metodu úpravy dat odpovídající BLL a pak zneplatní mezipaměť. Jak jsme viděli v předchozím kurzu, jedná se o stejné chování, které používá ObjectDataSource, když jsou povoleny funkce ukládání do mezipaměti a jsou vyvolány jeho Insertmetody , Updatenebo Delete .

Následující UpdateProduct přetížení ukazuje, jak implementovat metody úpravy dat v modulu CL:

<DataObjectMethodAttribute(DataObjectMethodType.Update, False)> _
Public Function UpdateProduct(productName As String, _
    unitPrice As Nullable(Of Decimal), productID As Integer) _
    As Boolean
    Dim result As Boolean = API.UpdateProduct(productName, unitPrice, productID)
    ' TODO: Invalidate the cache
    Return result
End Function

Metoda vrstvy obchodní logiky odpovídající úpravy dat je vyvolána, ale před vrácením odpovědi je potřeba zneplatnit mezipaměť. Bohužel, zneplatnění mezipaměti není jednoduché, protože ProductsCL třídy s GetProducts() a GetProductsByCategoryID(categoryID) metody každá přidává položky do mezipaměti s různými klíči a GetProductsByCategoryID(categoryID) metoda přidá jinou položku mezipaměti pro každé jedinečné categoryID.

Při zneplatnění mezipaměti musíme odebrat všechny položky, které mohly být přidány ProductsCL třídou . Toho lze dosáhnout přidružením závislosti mezipaměti ke každé položce přidané do mezipaměti v AddCacheItem(key, value) metodě . Obecně platí, že závislost mezipamětí může být jiná položka v mezipaměti, soubor v systému souborů nebo data z databáze Microsoft SQL Server. Když se závislost změní nebo se z mezipaměti odebere, položky mezipaměti, ke kterým je přidružená, se z mezipaměti automaticky vyřadí. Pro účely tohoto kurzu chceme v mezipaměti vytvořit další položku, která slouží jako závislost mezipaměti pro všechny položky přidané prostřednictvím ProductsCL třídy . Tímto způsobem lze všechny tyto položky odebrat z mezipaměti jednoduchým odebráním závislosti mezipaměti.

Pojďme aktualizovat metodu AddCacheItem(key, value) tak, aby každá položka přidaná do mezipaměti prostřednictvím této metody byla přidružená k jedné závislosti mezipaměti:

Private Sub AddCacheItem(ByVal rawKey As String, ByVal value As Object)
    Dim DataCache As System.Web.Caching.Cache = HttpRuntime.Cache
    ' Make sure MasterCacheKeyArray[0] is in the cache - if not, add it
    If DataCache(MasterCacheKeyArray(0)) Is Nothing Then
        DataCache(MasterCacheKeyArray(0)) = DateTime.Now
    End If
    ' Add a CacheDependency
    Dim dependency As New Caching.CacheDependency(Nothing, MasterCacheKeyArray) _
        DataCache.Insert(GetCacheKey(rawKey), value, dependency, _
        DateTime.Now.AddSeconds(CacheDuration), _
        System.Web.Caching.Cache.NoSlidingExpiration)
End Sub

MasterCacheKeyArray je pole řetězců, které obsahuje jednu hodnotu, ProductsCache. Nejprve se do mezipaměti přidá položka mezipaměti a přiřadí se aktuální datum a čas. Pokud položka mezipaměti již existuje, aktualizuje se. Dále se vytvoří závislost mezipaměti. Konstruktor CacheDependency třídy s má řadu přetížení, ale zde použitý konstruktor očekává dva String vstupy pole. První z nich určuje sadu souborů, které se mají použít jako závislosti. Vzhledem k tomu, že nechceme použít žádné závislosti založené na souborech, použije se pro první vstupní parametr hodnota Nothing . Druhý vstupní parametr určuje sadu klíčů mezipaměti, které se mají použít jako závislosti. V této části určíme naši jedinou závislost MasterCacheKeyArray– . Pak CacheDependency se předá Insert metodě .

Díky této úpravě v nástroji AddCacheItem(key, value)je zneplatnění mezipaměti stejně jednoduché jako odebrání závislosti.

<DataObjectMethodAttribute(DataObjectMethodType.Update, False)> _
Public Function UpdateProduct(ByVal productName As String, _
    ByVal unitPrice As Nullable(Of Decimal), ByVal productID As Integer) _
    As Boolean
    Dim result As Boolean = API.UpdateProduct(productName, unitPrice, productID)
    ' Invalidate the cache
    InvalidateCache()
    Return result
End Function
Public Sub InvalidateCache()
    ' Remove the cache dependency
    HttpRuntime.Cache.Remove(MasterCacheKeyArray(0))
End Sub

Krok 5: Volání vrstvy ukládání do mezipaměti z prezentační vrstvy

Třídy a metody vrstvy ukládání do mezipaměti je možné použít k práci s daty pomocí technik, které jsme prozkoumali v těchto kurzech. Chcete-li ilustrovat práci s daty v mezipaměti, uložte změny do ProductsCL třídy a pak otevřete FromTheArchitecture.aspx stránku ve Caching složce a přidejte GridView. Z inteligentní značky GridView vytvořte nový ObjectDataSource. V prvním kroku průvodce byste měli vidět ProductsCL třídu jako jednu z možností z rozevíracího seznamu.

Třída ProductsCL je zahrnutá v seznamu Drop-Down obchodních objektů.

Obrázek 4: Třída ProductsCL je zahrnutá v seznamu Drop-Down obchodních objektů (kliknutím zobrazíte obrázek v plné velikosti)

Po výběru ProductsCLklikněte na Další. Rozevírací seznam na kartě SELECT obsahuje dvě položky – GetProducts() a GetProductsByCategoryID(categoryID) karta UPDATE má jediné UpdateProduct přetížení. Zvolte metodu na GetProducts() kartě SELECT a metodu UpdateProducts na kartě UPDATE a klikněte na Dokončit.

Metody ProductsCL Class s jsou uvedeny v Drop-Down Seznamy

Obrázek 5: Metody ProductsCL třídy jsou uvedeny v Drop-Down Seznamy (kliknutím zobrazíte obrázek v plné velikosti)

Po dokončení průvodce Visual Studio nastaví vlastnost ObjectDataSource na OldValuesParameterFormatStringoriginal_{0} a přidá příslušná pole do objektu GridView. OldValuesParameterFormatString Změňte vlastnost zpět na výchozí hodnotu {0}a nakonfigurujte GridView tak, aby podporoval stránkování, řazení a úpravy. Vzhledem k tomu, UploadProducts přetížení používané cl přijímá pouze upravený název produktu a cenu, omezte GridView tak, aby pouze tato pole jsou upravitelné.

V předchozím kurzu jsme definovali Objekt GridView tak, aby zahrnoval pole pro ProductNamepole , CategoryNamea UnitPrice . Toto formátování a strukturu můžete replikovat. V takovém případě by deklarativní značky GridView a ObjectDataSource měly vypadat nějak takto:

<asp:GridView ID="Products" runat="server" AutoGenerateColumns="False" 
    DataKeyNames="ProductID" DataSourceID="ProductsDataSource" 
    AllowPaging="True" AllowSorting="True">
    <Columns>
        <asp:CommandField ShowEditButton="True" />
        <asp:TemplateField HeaderText="Product" SortExpression="ProductName">
            <EditItemTemplate>
                <asp:TextBox ID="ProductName" runat="server" 
                    Text='<%# Bind("ProductName") %>' />
                <asp:RequiredFieldValidator ID="RequiredFieldValidator1"
                    ControlToValidate="ProductName" Display="Dynamic" 
                    ErrorMessage="You must provide a name for the product." 
                    SetFocusOnError="True"
                    runat="server">*</asp:RequiredFieldValidator>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label2" runat="server" 
                    Text='<%# Bind("ProductName") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="CategoryName" HeaderText="Category" 
            ReadOnly="True" SortExpression="CategoryName" />
        <asp:TemplateField HeaderText="Price" SortExpression="UnitPrice">
            <EditItemTemplate>
                $<asp:TextBox ID="UnitPrice" runat="server" Columns="8" 
                    Text='<%# Bind("UnitPrice", "{0:N2}") %>'></asp:TextBox>
                <asp:CompareValidator ID="CompareValidator1" runat="server" 
                    ControlToValidate="UnitPrice" Display="Dynamic" 
                    ErrorMessage="You must enter a valid currency value with 
                        no currency symbols. Also, the value must be greater than 
                        or equal to zero."
                    Operator="GreaterThanEqual" SetFocusOnError="True" 
                    Type="Currency" ValueToCompare="0">*</asp:CompareValidator>
            </EditItemTemplate>
            <ItemStyle HorizontalAlign="Right" />
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" 
                    Text='<%# Bind("UnitPrice", "{0:c}") %>' />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
<asp:ObjectDataSource ID="ProductsDataSource" runat="server" 
    OldValuesParameterFormatString="{0}" SelectMethod="GetProducts" 
    TypeName="ProductsCL" UpdateMethod="UpdateProduct">
    <UpdateParameters>
        <asp:Parameter Name="productName" Type="String" />
        <asp:Parameter Name="unitPrice" Type="Decimal" />
        <asp:Parameter Name="productID" Type="Int32" />
    </UpdateParameters>
</asp:ObjectDataSource>

V tomto okamžiku máme stránku, která používá vrstvu ukládání do mezipaměti. Pokud chcete zobrazit mezipaměť v akci, nastavte zarážky v ProductsCL metodách třídy s GetProducts() a UpdateProduct . Přejděte na stránku v prohlížeči a při řazení a stránkování projděte kód, abyste viděli data získaná z mezipaměti. Potom aktualizujte záznam a všimněte si, že mezipaměť je neplatná a v důsledku toho je načtena z BLL, když data jsou zpět do GridView.

Poznámka

Vrstva ukládání do mezipaměti uvedená ve stažení připojeném k tomuto článku není úplná. Obsahuje pouze jednu třídu , ProductsCLkterá nabízí pouze několik metod. Kromě toho pouze jedna ASP.NET stránka používá CL (~/Caching/FromTheArchitecture.aspx), všechny ostatní stále odkazují na BLL přímo. Pokud máte v úmyslu používat cl ve vaší aplikaci, všechna volání z prezentační vrstvy by měla přejít na CL, což by vyžadovalo, aby třídy a metody CL pokrývaly tyto třídy a metody v BLL aktuálně používané prezentační vrstvou.

Souhrn

I když ukládání do mezipaměti lze použít na prezentační vrstvě s ovládacími prvky SqlDataSource a ObjectDataSource ASP.NET 2.0 s, v ideálním případě by se odpovědnosti za ukládání do mezipaměti delegovaly na samostatnou vrstvu v architektuře. V tomto kurzu jsme vytvořili vrstvu ukládání do mezipaměti, která se nachází mezi prezentační vrstvou a vrstvou obchodní logiky. Vrstva ukládání do mezipaměti musí poskytovat stejnou sadu tříd a metod, které existují v BLL a jsou volána z prezentační vrstvy.

Příklady ukládání do mezipaměti vrstvy, které jsme prozkoumali v tomto a předchozích kurzech, vykazují reaktivní načítání. Při reaktivním načítání se data načtou do mezipaměti pouze v případě, že je proveden požadavek na data a tato data v mezipaměti chybí. Data je také možné proaktivně načítat do mezipaměti. Jde o techniku, která načte data do mezipaměti dříve, než je skutečně potřeba. V dalším kurzu uvidíme příklad proaktivního načítání, když se podíváme na to, jak ukládat statické hodnoty do mezipaměti při spuštění aplikace.

Všechno nejlepší na programování!

O autorovi

Scott Mitchell, autor sedmi knih o ASP/ASP.NET a zakladatel 4GuysFromRolla.com, pracuje s webovými technologiemi Microsoftu od roku 1998. Scott pracuje jako nezávislý konzultant, školitel a spisovatel. Jeho nejnovější kniha je Sams Teach Yourself ASP.NET 2.0 in 24 Hours. Můžete ho zastihnout na mitchell@4GuysFromRolla.comadrese . nebo prostřednictvím jeho blogu, který najdete na adrese http://ScottOnWriting.NET.

Zvláštní poděkování

Tato série kurzů byla zkontrolována mnoha užitečnými recenzenty. Hlavní revidující pro tento kurz byla Teresa Murphyová. Chtěli byste si projít své nadcházející články na webu MSDN? Pokud ano, dejte mi řádek na mitchell@4GuysFromRolla.com.