Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V předchozím kurzu jsme zjistili, 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í. Objekt ObjectDataSource bohužel používá ukládání do mezipaměti ve vrstvě prezentace, která úzce páruje 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 rozpojení takových 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 je částečně upřednostňované, protože systém je čitelnější, lépe udržovatelný a flexibilnější pro změnu. Umožňuje také znalost domény a rozdělení práce vývojáře pracujícího na prezentační vrstvě nemusí být obeznámen s podrobnostmi databáze, aby mohla 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 tak, aby zahrnovala vrstvu ukládání do mezipaměti (nebo CL jako zkratka), která využívá naše zásady ukládání do mezipaměti. Vrstva ukládání do mezipaměti bude obsahovat třídu ProductsCL, která poskytuje přístup k informacím o produktu pomocí metod, jako jsou GetProducts(), GetProductsByCategoryID(categoryID) a další, které se při vyvolání nejprve pokusí načíst data z mezipaměti. Pokud je mezipaměť prázdná, tyto metody vyvolají v BLL příslušnou ProductsBLL metodu, která by zase získala data z DAL. Metody ProductsCL ukládají data načtená z BLL do mezipaměti před jejich vrácením.
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 vrstvy mezipaměti
V tomto kurzu vytvoříme velmi jednoduchý modul CL s jednou třídou ProductsCL , která má pouze několik metod. Vytvoření úplné vrstvy ukládání do mezipaměti pro celou aplikaci by vyžadovalo vytvoření CategoriesCL, EmployeesCLa SuppliersCL třídy a poskytnutí metody v těchto třídách vrstvy ukládání do mezipaměti pro každý přístup k datům nebo úpravu metody v BLL. Stejně jako u BLL a DAL by se vrstva ukládání do mezipaměti měla ideálně implementovat jako samostatný projekt knihovny tříd; nicméně ji implementujeme jako třídu ve složce App_Code.
Pokud chcete vyčistit třídy CL od tříd DAL a BLL, vytvoříme ve App_Code složce novou podsložku. Klikněte pravým tlačítkem myši na App_Code složku v Průzkumníku ř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 CL a pojmenované třídy ProductsCL.vb
Třída ProductsCL by měla obsahovat stejnou sadu metod přístupu k datům a úpravám, které byly nalezeny v odpovídající třídě vrstvy obchodní logiky (ProductsBLL). Místo vytváření všech těchto metod vytvořme zde několik, abychom získali představu o vzorcích používaných CL. Konkrétně přidáme metody GetProducts() a GetProductsByCategoryID(categoryID) v kroku 3 a přetížení UpdateProduct v kroku 4. Můžete přidat zbývající ProductsCL metody a CategoriesCL, EmployeesCL a SuppliersCL třídy ve volném čase.
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á mezipaměť dat ASP.NET k ukládání dat načtených z BLL. K mezipaměti dat lze přistupovat také programově z tříd code-behind stránek ASP.NET nebo z tříd v architektuře webové aplikace. Pro čtení a zápis do datové mezipaměti ze třídy code-behind stránky ASP.NET 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 má Insert řadu přetížení.
Cache("key") = value a Cache.Insert(key, value) jsou synonymní a oba přidávají položku do mezipaměti pomocí zadaného klíče bez definované doby 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í časového limitu nebo obojího. Použijte jedno z ostatních přetížení metody Insert k poskytnutí informací o vypršení platnosti, které jsou založené na závislostech nebo čase.
Metody vrstvy ukládání do mezipaměti musí nejprve zkontrolovat, jestli jsou požadovaná data v mezipaměti, a pokud ano, vrátí je odtud. Pokud požadovaná data nejsou v mezipaměti, je potřeba vyvolat příslušnou metodu BLL. Vrácená hodnota by se měla uložit do mezipaměti a pak se vrátit, 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
Sekvence 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 když 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 okamžiku, kdy je dosaženo Return instance, obsahuje instance odkaz na data, buď z mezipaměti, nebo staženo 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ý se na první pohled zdá být ekvivalentní, obsahuje malý rozdíl, který představuje závodní podmínku. Závodní podmínky se obtížně ladí, protože se odhalí sporadicky a obtížně se reprodukují.
If Cache("key") Is Nothing Then
Cache.Insert(key, BllMethodToGetInstance(), ...)
End If
Return Cache("key")
Rozdíl v této druhé, nesprávného fragmentu kódu spočívá v tom, že místo toho, aby se odkaz na položku uloženou v mezipaměti ukládal do místní proměnné, k mezipaměti dat je přistupováno přímo v podmíněném příkazu a v Return. Představte si, že když dojde k dosažení tohoto kódu, Cache("key") 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ě kód vrátí 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 pro jednoduché čtení nebo zápisy nemusíte synchronizovat přístup z více vláken. Pokud ale potřebujete provádět více operací s daty v mezipaměti, které musí být atomické, zodpovídáte za implementaci zámku nebo jiného mechanismu, abyste zajistili bezpečnost vláken. Další informace najdete v tématu Synchronizace přístupu k mezipaměti ASP.NET.
Položku lze programově vyřadit z mezipaměti dat pomocí Remove podobné metody :
Cache.Remove(key)
Krok 3: Vrácení informací o produktu zProductsCLtřídy
Pro účely tohoto kurzu implementujme dvě metody pro vrácení informací o produktu z třídy ProductsCL: GetProducts() a GetProductsByCategoryID(categoryID). Stejně jako u ProductsBL třídy ve vrstvě GetProducts() obchodní logiky 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 a DataObjectMethodAttribute atributů použitých pro třídu a metody. Tyto atributy poskytují informace průvodci ObjectDataSource s, které označují, jaké třídy a metody by se měly zobrazit v krocích průvodce. Vzhledem k tomu, že třídy a metody CL budou přístupné z ObjectDataSource v prezentační vrstvě, přidal jsem tyto atributy, aby se zlepšilo prostředí návrhu. Podrobnější popis těchto atributů a jejich efektů najdete v kurzu Vytvoření vrstvy obchodní logiky .
V metodách GetProducts() a GetProductsByCategoryID(categoryID) jsou data vrácená metodou GetCacheItem(key) přiřazena místní proměnné. Metoda GetCacheItem(key) , kterou krátce prozkoumáme, vrátí konkrétní položku z mezipaměti na základě zadaného klíče. Pokud v mezipaměti nejsou nalezena žádná taková data, načte se z odpovídající ProductsBLL metody třídy a pak se přidá do mezipaměti pomocí AddCacheItem(key, value) metody.
Metody GetCacheItem(key) a AddCacheItem(key, value) komunikují s mezipamětí dat, přičemž jedna z metod slouží k čtení hodnot a druhá k zápisu. Metoda GetCacheItem(key) je jednodušší ze 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 jako zadanou, ale místo toho volá metodu GetCacheKey(key) , která vrací klíč předpřipravený pomocí ProductsCache-.
MasterCacheKeyArray, který obsahuje řetězec ProductsCache, je také používán metodou AddCacheItem(key, value), jak brzy uvidíme.
Ze třídy v kódu ASP.NET stránky lze k mezipaměti dat přistupovat pomocí Page vlastnosti třídy Cache, a umožňuje použití syntaxe jako je Cache("key") = value, jak je popsáno v kroku 2. Z třídy v architektuře lze k mezipaměti dat přistupovat buď pomocí HttpRuntime.Cache, nebo HttpContext.Current.Cache.
Peter Johnsonův blogový příspěvek HttpRuntime.Cache vs. HttpContext.Current.Cache zaznamenává mírnou výhodu výkonu při použití HttpRuntime místo HttpContext.Current; v důsledku toho ProductsCL 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žít třídy HttpRuntime a HttpContext třídy.
Pokud položka není v mezipaměti nalezena, ProductsCL metody třídy s získávají data z BLL a přidávají 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 vypršení platnosti 60 sekund v budoucnu, zatímco System.Web.Caching.Cache.NoSlidingExpiration indikuje, že neexistuje žádné posuvné vypršení platnosti. I když toto přetížení metody Insert má vstupní parametry pro absolutní i posuvnou vypršení platnosti, můžete zadat pouze jednu z těchto dvou. Pokud se pokusíte zadat absolutní čas i časové rozpětí, Insert metoda vyvolá ArgumentException výjimku.
Poznámka:
Tato implementace AddCacheItem(key, value) metody má v současné době určité nedostatky. Tyto problémy vyřešíme a překonáme ve čtvrtém kroku.
Krok 4: Zrušení platnosti mezipaměti při změně dat prostřednictvím architektury
Společně 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 úprav dat CL neupravují data uložená v mezipaměti, ale místo toho volají odpovídající metodu úprav dat BLL a pak zneplatní mezipaměť. Jak jsme viděli v předchozím kurzu, jedná se o stejné chování, které ObjectDataSource platí, když jsou jeho funkce ukládání do mezipaměti povoleny a jeho Insert, Updatenebo Delete metody jsou vyvolány.
Následující UpdateProduct přetížení demonstruje, jak zavést metody pro úpravu dat v kontextu 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
Vyvolá se příslušná metoda vrstvy obchodní logiky pro úpravu dat, ale před vrácením odpovědi potřebujeme zneplatnit mezipaměť. Zrušení mezipaměti bohužel není jednoduché, protože ProductsCL třídy GetProducts() a GetProductsByCategoryID(categoryID) metody každé přidávají položky do mezipaměti s různými klíči a GetProductsByCategoryID(categoryID) metoda přidá jinou položku mezipaměti pro každou jedinečnou hodnotu 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ěti může být jinou položkou v mezipaměti, souborem v systému souborů nebo daty z databáze Microsoft SQL Serveru. Když se závislost změní nebo se odebere z mezipaměti, položky mezipaměti, ke kterým je přidružená, se automaticky vyřadí z mezipaměti. V tomto kurzu chceme vytvořit další položku v mezipaměti, 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 odstranit z mezipaměti jednoduše odstraněním mezipaměťové závislosti.
Pojďme metodu AddCacheItem(key, value) aktualizovat tak, aby každá položka přidaná do mezipaměti prostřednictvím této metody byla přidružena 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 na mezipaměti. Konstruktor CacheDependency třídy má řadu přetížení, ale ten, který se zde používá, očekává dva String vstupy pole. První určuje sadu souborů, které se mají použít jako závislosti. Vzhledem k tomu, že nechceme používat žádné závislosti založené na souborech, použije se hodnota prvního vstupního Nothing parametru. Druhý vstupní parametr určuje sadu klíčů mezipaměti, které se mají použít jako závislosti. Zde určíme naši jedinou závislost, MasterCacheKeyArray. Poté CacheDependency se předá do Insert metody.
Při této úpravě AddCacheItem(key, value) je zrušení cache 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í mezipaměťové vrstvy z prezentační vrstvy
Třídy a metody vrstvy ukládání do mezipaměti lze použít k práci s daty pomocí technik, které jsme prozkoumali v těchto kurzech. Pokud chcete ilustrovat práci s daty uloženými v mezipaměti, uložte změny třídy ProductsCL 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 třídu ProductsCL jako jednu z možností z rozevíracího seznamu.
Obrázek 4: Třída ProductsCL je součástí seznamu Drop-Down obchodního objektu (kliknutím zobrazíte obrázek v plné velikosti).
Po výběru ProductsCLklepněte na tlačítko Další. Rozevírací seznam na kartě SELECT obsahuje dvě položky – GetProducts() a GetProductsByCategoryID(categoryID) - zatímco karta UPDATE má pouze jedno přetížení UpdateProduct. Zvolte metodu GetProducts() na kartě SELECT a metodu UpdateProducts na kartě UPDATE a klikněte na Tlačítko Dokončit.
Obrázek 5: Metody ProductsCL tříd jsou uvedeny v Drop-Down seznamech (kliknutím zobrazíte obrázek plné velikosti).
Po dokončení průvodce Visual Studio nastaví vlastnost OldValuesParameterFormatString ObjectDataSource na original_{0} a přidá příslušná pole do GridView.
OldValuesParameterFormatString Změňte vlastnost zpět na výchozí hodnotu a nakonfigurujte GridView tak, {0}aby podporovala stránkování, řazení a úpravy. Vzhledem k tomu, že přetížení používané CL přijímá pouze název a cenu editovaného produktu, omezte GridView tak, aby bylo možné upravovat pouze tato pole.
V předchozím kurzu jsme definovali GridView tak, aby zahrnoval pole pro ProductName, CategoryName a UnitPrice. Toto formátování a strukturu můžete bez obav replikovat, v takovém případě by deklarativní kód GridView a ObjectDataSource měly vypadat přibližně 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 tuto chvíli máme stránku, která používá vrstvu ukládání do mezipaměti. Pokud chcete zobrazit mezipaměť v praxi, nastavte body přerušení ve ProductsCL třídě a GetProducts() a UpdateProduct metodách. Navštivte stránku v prohlížeči a projděte kód při řazení a stránkování, abyste viděli data načítaná z mezipaměti. Pak aktualizujte záznam a všimněte si, že mezipaměť je neplatná a v důsledku toho se načte z BLL, když se data přepočítají do GridView.
Poznámka:
Vrstva ukládání do mezipaměti poskytnutá ve stažení doprovázejícím tento článek není dokončená. Obsahuje pouze jednu třídu, ProductsCL, která zahrnuje pouze několik metod. Kromě toho pouze jedna ASP.NET stránka používá CL (~/Caching/FromTheArchitecture.aspx), zatímco všechny ostatní stále odkazují přímo na BLL. Pokud plánujete použít cl v aplikaci, všechna volání z prezentační vrstvy by měla jít do CL, což by vyžadovalo, aby třídy a metody CL probíraly tyto třídy a metody v BLL aktuálně používané prezentační vrstvou.
Shrnutí
Ukládání do mezipaměti lze použít na prezentační vrstvě s ovládacími prvky SqlDataSource a ObjectDataSource v ASP.NET 2.0, ale v ideálním případě by odpovědnost za ukládání do mezipaměti měla být delegována 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 vrstvy ukládání do mezipaměti, které jsme prozkoumali v tomto a předchozích tutoriálech, vykazovaly reaktivní načítání. Při reaktivním načítání se data načtou do mezipaměti jenom v případě, že se vytvoří požadavek na data a tato data v mezipaměti chybí. Data je také možné proaktivně načíst do mezipaměti, techniku, která načte data do mezipaměti předtím, než je skutečně potřeba. V dalším kurzu uvidíme příklad proaktivního načítání, když se podíváme, jak ukládat statické hodnoty do mezipaměti při spuštění aplikace.
Šťastné programování!
O autorovi
Scott Mitchell, autor sedmi knih ASP/ASP.NET a zakladatel 4GuysFromRolla.com, pracuje s webovými technologiemi Microsoftu od roku 1998. Scott pracuje jako nezávislý konzultant, trenér a spisovatel. Jeho nejnovější kniha je Sams: Nauč se ASP.NET 2.0 za 24 hodin. Může být dosažitelný na mitchell@4GuysFromRolla.comadrese .
Zvláštní díky
Tato série kurzů byla zkontrolována mnoha užitečnými recenzenty. Vedoucí recenzentkou pro tento tutoriál byla Teresa Murphy. Chcete si projít nadcházející články MSDN? Pokud ano, napište mi zprávu na mitchell@4GuysFromRolla.com.