Ukládání dat do mezipaměti v architektuře (VB)
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.
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í CategoriesCL
tříd , EmployeesCL
a 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
.
Obrázek 2: Přidání nové složky s názvem a třídy s názvem CL
ProductsCL.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 , EmployeesCL
a CategoriesCL
SuppliersCL
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.
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 instance
dosaž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 zProductsCL
tří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 MasterCacheKeyArray
použí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 Cache
a umožňuje syntaxi, jako Cache("key") = value
je , jak je popsáno v kroku 2. Z třídy v rámci architektury je k mezipaměti dat přístup pomocí nebo HttpRuntime.Cache
HttpContext.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 Insert
metody , Update
nebo 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.
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 ProductsCL
klikně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.
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 OldValuesParameterFormatString
original_{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 ProductName
pole , CategoryName
a 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 , ProductsCL
která 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.