Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
oleh Scott Mitchell
Dalam tutorial sebelumnya, kita telah belajar cara menerapkan penyimpanan sementara di Lapisan Penyajian. Dalam tutorial ini kita mempelajari cara memanfaatkan arsitektur berlapis kami untuk menyimpan data di Lapisan Logika Bisnis. Kami melakukan ini dengan memperluas arsitektur untuk menyertakan Lapisan Caching.
Pendahuluan
Seperti yang telah kita bahas dalam tutorial sebelumnya, caching data ObjectDataSource sesederhana menyetel beberapa properti. Sayangnya, ObjectDataSource menerapkan penyimpanan sementara di Lapisan Presentasi, yang mengaitkan kebijakan penyimpanan sementara dengan halaman ASP.NET secara erat. Salah satu alasan untuk membuat arsitektur berlapis adalah untuk memungkinkan kopling tersebut rusak. Lapisan Logika Bisnis, misalnya, memisahkan logika bisnis dari halaman ASP.NET, sementara Lapisan Akses Data memisahkan detail akses data. Pemisahan logika bisnis dan detail akses data ini lebih disukai, sebagian, karena membuat sistem lebih mudah dibaca, lebih dapat dipertahankan, dan lebih fleksibel untuk diubah. Ini juga memungkinkan pengetahuan domain dan pembagian tenaga kerja pengembang yang bekerja di Lapisan Presentasi tidak perlu terbiasa dengan detail database untuk melakukan pekerjaannya. Memisahkan kebijakan penyimpanan sementara dari Lapisan Presentasi menawarkan manfaat yang serupa.
Dalam tutorial ini kami akan memperkuat arsitektur kami untuk menyertakan Caching Layer (atau disingkat CL) yang menggunakan kebijakan caching kami. Lapisan Caching akan mencakup kelas ProductsCL
yang menyediakan akses ke informasi produk dengan metode seperti GetProducts()
, GetProductsByCategoryID(categoryID)
, dan sebagainya, yang ketika dipanggil akan terlebih dahulu mencoba mengambil data dari cache. Jika cache kosong, metode ini akan memanggil metode yang sesuai ProductsBLL
di BLL, yang pada gilirannya akan mendapatkan data dari DAL. Metode ProductsCL
menyimpan dalam cache data yang diambil dari BLL sebelum mengembalikannya.
Seperti yang ditunjukkan Gambar 1, CL berada di antara Lapisan Logika Presentasi dan Bisnis.
Gambar 1: Lapisan Penembolokan (CL) adalah Lapisan Lain dalam Arsitektur Kami
Langkah 1: Membuat Kelas Lapisan Cache
Dalam tutorial ini kita akan membuat CL yang sangat sederhana dengan satu kelas ProductsCL
yang hanya memiliki beberapa metode. Membangun Lapisan Penembolokan lengkap untuk seluruh aplikasi akan memerlukan pembuatan CategoriesCL
kelas , EmployeesCL
, dan SuppliersCL
, dan menyediakan metode dalam kelas Lapisan Penembolokan ini untuk setiap akses data atau metode modifikasi di BLL. Seperti halnya BLL dan DAL, Lapisan Penyimpanan Sementara sebaiknya diimplementasikan sebagai proyek Pustaka Kelas terpisah; namun, kami akan mengimplementasikannya sebagai kelas di direktori App_Code
.
Untuk memisahkan kelas CL dengan lebih bersih dari kelas DAL dan BLL, mari kita buat subfolder baru di App_Code
folder. Klik kanan pada App_Code
folder di Penjelajah Solusi, pilih Folder Baru, dan beri nama folder CL
baru . Setelah membuat folder ini, tambahkan ke dalamnya kelas baru bernama ProductsCL.cs
.
Gambar 2: Tambahkan Folder Baru Bernama CL
dan Kelas Bernama ProductsCL.cs
Kelas ProductsCL
harus menyertakan set metode akses dan modifikasi data yang sama seperti yang ditemukan di kelas Lapisan Logika Bisnis yang sesuai (ProductsBLL
). Daripada membuat semua metode ini, mari kita mengembangkan beberapa di sini agar memahami pola yang digunakan oleh CL. Secara khusus, kita akan menambahkan metode-metode GetProducts()
dan GetProductsByCategoryID(categoryID)
di Langkah 3 dan melakukan overloading UpdateProduct
di Langkah 4. Anda dapat menambahkan metode ProductsCL
dan kelas CategoriesCL
, EmployeesCL
, dan SuppliersCL
di waktu luang Anda.
Langkah 2: Membaca dan Menulis ke Cache Data
Fitur penyimpanan sementara ObjectDataSource yang telah dibahas dalam tutorial sebelumnya secara internal menggunakan cache data ASP.NET untuk menyimpan data yang diambil dari BLL. Cache data juga dapat diakses secara terprogram dari halaman ASP.NET kelas kode belakang atau dari kelas dalam arsitektur aplikasi web. Untuk membaca dan menulis ke cache data dari kelas code-behind halaman ASP.NET, gunakan pola berikut:
// Read from the cache
object value = 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);
Metode Cache
kelas memiliki Insert
sejumlah kelebihan beban.
Cache["key"] = value
dan Cache.Insert(key, value)
identik dan keduanya menambahkan item ke cache menggunakan kunci yang ditentukan tanpa kedaluwarsa yang ditentukan. Biasanya, kita ingin menentukan kedaluwarsa saat menambahkan item ke cache, baik sebagai dependensi, kedaluwarsa berbasis waktu, atau keduanya. Gunakan salah satu metode lain Insert
yang kelebihan beban untuk memberikan informasi kedaluwarsa dependensi atau berbasis waktu.
Metode Caching Layer s perlu terlebih dahulu memeriksa apakah data yang diminta ada di cache dan, jika demikian, mengembalikannya dari sana. Jika data yang diminta tidak ada di cache, metode BLL yang sesuai perlu dipanggil. Nilai pengembaliannya harus di-cache dan kemudian dikembalikan, seperti yang diilustrasikan oleh diagram urutan berikut.
Gambar 3: Metode Lapisan Penyimpanan Sementara Mengembalikan Data dari Cache jika Tersedia
Urutan yang digambarkan dalam Gambar 3 dicapai di kelas CL menggunakan pola berikut:
Type instance = Cache["key"] as Type;
if (instance == null)
{
instance = BllMethodToGetInstance();
Cache.Insert(key, instance, ...);
}
return instance;
Di sini, Jenis adalah jenis data yang disimpan dalam cache Northwind.ProductsDataTable
, misalnya sementara kunci adalah kunci yang secara unik mengidentifikasi item cache. Jika item dengan kunci yang ditentukan tidak ada di cache, maka instans akan menjadi null
dan data akan diambil dari metode BLL yang sesuai dan ditambahkan ke cache. Pada saat return instance
tercapai, instans berisi referensi ke data, baik dari cache atau diambil dari BLL.
Pastikan untuk menggunakan pola di atas saat mengakses data dari cache. Pola berikut, yang, pada pandangan pertama, terlihat setara, berisi perbedaan halus yang memperkenalkan kondisi balapan. Kondisi balapan sulit untuk debug karena mereka mengungkapkan diri mereka secara sporatik dan sulit untuk diproduksi ulang.
if (Cache["key"] == null)
{
Cache.Insert(key, BllMethodToGetInstance(), ...);
}
return Cache["key"];
Perbedaan dalam cuplikan kode kedua yang salah ini adalah daripada menyimpan referensi ke item yang di-cache dalam variabel lokal, cache data diakses langsung dalam pernyataan kondisional dan di return
. Bayangkan bahwa ketika kode ini tercapai, Cache["key"]
bukan null
, tetapi sebelum pencapaian pernyataan return
, sistem mengeluarkan kunci dari cache. Dalam kasus yang jarang terjadi ini, kode akan mengembalikan nilai null
bukan objek dalam tipe yang diharapkan.
Nota
Cache data aman terhadap utas, jadi Anda tidak perlu menyinkronkan akses utas untuk pembacaan atau penulisan sederhana. Namun, jika Anda perlu melakukan beberapa operasi pada data di cache yang harus bersifat atomik, Anda bertanggung jawab untuk menerapkan mekanisme penguncian atau mekanisme lain untuk memastikan keselamatan utas. Lihat Menyinkronkan Akses ke ASP.NET Cache untuk informasi selengkapnya.
Item dapat dikeluarkan secara terprogram dari cache data menggunakan metode seperti ituRemove
:
Cache.Remove(key);
Langkah 3: Mengembalikan Informasi mengenai Produk dariProductsCL
Kelas
Untuk tutorial ini mari kita terapkan dua metode untuk mengembalikan informasi produk dari ProductsCL
kelas: GetProducts()
dan GetProductsByCategoryID(categoryID)
. Seperti pada kelas di Lapisan Logika Bisnis, metode ProductsBL
di CL mengembalikan informasi tentang semua produk sebagai sebuah objek GetProducts()
. Sementara itu, Northwind.ProductsDataTable
mengembalikan semua produk dari kategori tertentu.
Kode berikut menunjukkan sebagian metode di ProductsCL
kelas :
[System.ComponentModel.DataObject]
public class ProductsCL
{
private ProductsBLL _productsAPI = null;
protected ProductsBLL API
{
get
{
if (_productsAPI == null)
_productsAPI = new ProductsBLL();
return _productsAPI;
}
}
[System.ComponentModel.DataObjectMethodAttribute(DataObjectMethodType.Select, true)]
public Northwind.ProductsDataTable GetProducts()
{
const string rawKey = "Products";
// See if the item is in the cache
Northwind.ProductsDataTable products = _
GetCacheItem(rawKey) as Northwind.ProductsDataTable;
if (products == null)
{
// Item not found in cache - retrieve it and insert it into the cache
products = API.GetProducts();
AddCacheItem(rawKey, products);
}
return products;
}
[System.ComponentModel.DataObjectMethodAttribute(DataObjectMethodType.Select, false)]
public Northwind.ProductsDataTable GetProductsByCategoryID(int categoryID)
{
if (categoryID < 0)
return GetProducts();
else
{
string rawKey = string.Concat("ProductsByCategory-", categoryID);
// See if the item is in the cache
Northwind.ProductsDataTable products = _
GetCacheItem(rawKey) as Northwind.ProductsDataTable;
if (products == null)
{
// Item not found in cache - retrieve it and insert it into the cache
products = API.GetProductsByCategoryID(categoryID);
AddCacheItem(rawKey, products);
}
return products;
}
}
}
Pertama, perhatikan atribut DataObject
dan DataObjectMethodAttribute
yang diterapkan pada kelas dan metode. Atribut ini memberikan informasi ke wizard ObjectDataSource, menunjukkan kelas dan metode apa yang akan muncul dalam langkah-langkah wizard. Karena kelas dan metode CL akan diakses dari ObjectDataSource di Lapisan Presentasi, saya menambahkan atribut ini untuk meningkatkan pengalaman waktu desain. Lihat kembali tutorial Membuat Lapisan Logika Bisnis untuk deskripsi yang lebih menyeluruh tentang atribut ini dan efeknya.
Dalam metode GetProducts()
dan GetProductsByCategoryID(categoryID)
, data yang dikembalikan dari metode GetCacheItem(key)
ditetapkan ke variabel lokal. Metode GetCacheItem(key)
, yang akan segera kita periksa, mengembalikan item tertentu dari cache berdasarkan kunci yang ditentukan. Jika tidak ada data seperti itu yang ditemukan di cache, data diambil dari metode kelas yang ProductsBLL
sesuai lalu ditambahkan ke cache menggunakan AddCacheItem(key, value)
metode .
Metode GetCacheItem(key)
dan AddCacheItem(key, value)
berinteraksi dengan cache data, masing-masing untuk membaca dan menulis nilai. Metode GetCacheItem(key)
ini adalah yang lebih sederhana dari keduanya. Ini hanya mengembalikan nilai dari kelas Cache dengan menggunakan kunci yang diberikan:
private object GetCacheItem(string rawKey)
{
return HttpRuntime.Cache[GetCacheKey(rawKey)];
}
private readonly string[] MasterCacheKeyArray = {"ProductsCache"};
private string GetCacheKey(string cacheKey)
{
return string.Concat(MasterCacheKeyArray[0], "-", cacheKey);
}
GetCacheItem(key)
tidak menggunakan nilai kunci seperti yang disediakan, melainkan memanggil metode GetCacheKey(key)
, yang mengembalikan kunci yang diawali dengan ProductsCache-.
MasterCacheKeyArray
, yang menyimpan string ProductsCache, juga digunakan oleh metode AddCacheItem(key, value)
seperti yang akan kita lihat sebentar lagi.
Dari halaman ASP.NET s code-behind class, cache data dapat diakses menggunakan Page
properti kelas sCache
, dan memungkinkan sintaks seperti Cache["key"] = value
, seperti yang dibahas di Langkah 2. Dari kelas dalam arsitektur, cache data dapat diakses menggunakan HttpRuntime.Cache
atau HttpContext.Current.Cache
. Entri blog Peter JohnsonHttpRuntime.Cache vs. HttpContext.Current.Cache mencatat sedikit keuntungan performa dalam menggunakan HttpRuntime
alih-alih HttpContext.Current
; akibatnya, ProductsCL
menggunakan HttpRuntime
.
Nota
Jika arsitektur Anda diimplementasikan menggunakan proyek Pustaka Kelas, maka Anda harus menambahkan referensi ke assembly System.Web
untuk menggunakan kelas HttpRuntime dan HttpContext.
Jika item tidak ditemukan di cache, ProductsCL
metode kelas s mendapatkan data dari BLL dan menambahkannya ke cache menggunakan AddCacheItem(key, value)
metode . Untuk menambahkan nilai ke cache, kita dapat menggunakan kode berikut, yang menggunakan waktu kedaluwarsa 60 detik:
const double CacheDuration = 60.0;
private void AddCacheItem(string rawKey, object value)
{
HttpRuntime.Cache.Insert(GetCacheKey(rawKey), value, null,
DateTime.Now.AddSeconds(CacheDuration), Caching.Cache.NoSlidingExpiration);
}
DateTime.Now.AddSeconds(CacheDuration)
menentukan kedaluwarsa berbasis waktu 60 detik di masa mendatang sementara System.Web.Caching.Cache.NoSlidingExpiration
menunjukkan bahwa tidak ada kedaluwarsa geser. Meskipun metode ini Insert
kelebihan beban memiliki parameter input untuk kedaluwarsa absolut dan geser, Anda hanya dapat menyediakan salah satu dari keduanya. Jika Anda mencoba menentukan waktu absolut dan rentang waktu, metode Insert
akan menghasilkan pengecualian ArgumentException
.
Nota
Implementasi AddCacheItem(key, value)
metode ini saat ini memiliki beberapa kekurangan. Kami akan menangani dan mengatasi masalah ini di Langkah 4.
Langkah 4: Membatalkan Cache Saat Data Dimodifikasi Melalui Arsitektur
Bersama dengan metode pengambilan data, Lapisan Penembolokan perlu menyediakan metode yang sama dengan BLL untuk menyisipkan, memperbarui, dan menghapus data. Metode modifikasi data CL tidak memodifikasi data yang di-cache, melainkan memanggil metode modifikasi data terkait BLL dan kemudian membatalkan cache. Seperti yang kita lihat dalam tutorial sebelumnya, ini adalah perilaku yang sama yang diterapkan ObjectDataSource ketika fitur penembolokannya diaktifkan dan metode Insert
, Update
, atau Delete
dipanggil.
Kelebihan beban berikut UpdateProduct
menggambarkan cara mengimplementasikan metode modifikasi data di CL:
[System.ComponentModel.DataObjectMethodAttribute(DataObjectMethodType.Update, false)]
public bool UpdateProduct(string productName, decimal? unitPrice, int productID)
{
bool result = API.UpdateProduct(productName, unitPrice, productID);
// TODO: Invalidate the cache
return result;
}
Metode Business Logic Layer modifikasi data yang sesuai dipanggil, tetapi sebelum responsnya dikembalikan, kita perlu membatalkan cache. Sayangnya, membatalkan cache tidak mudah karena ProductsCL
kelas dan GetProducts()
GetProductsByCategoryID(categoryID)
metode masing-masing menambahkan item ke cache dengan kunci yang berbeda, dan GetProductsByCategoryID(categoryID)
metode menambahkan item cache yang berbeda untuk setiap categoryID unik.
Saat membatalkan cache, kita perlu menghapus semua item yang mungkin telah ditambahkan oleh ProductsCL
kelas. Ini dapat dicapai dengan mengaitkan dependensi cache dengan setiap item yang ditambahkan ke cache melalui metode AddCacheItem(key, value)
. Secara umum, dependensi cache dapat menjadi item lain dalam cache, file pada sistem file, atau data dari database Microsoft SQL Server. Ketika dependensi berubah atau dihapus dari cache, item cache yang terkait dengannya secara otomatis dikeluarkan dari cache. Untuk tutorial ini, kami ingin membuat item tambahan di cache yang berfungsi sebagai dependensi cache untuk semua item yang ditambahkan melalui ProductsCL
kelas . Dengan begitu, semua item ini dapat dihapus dari cache hanya dengan menghapus dependensi cache.
Mari kita perbarui AddCacheItem(key, value)
metode sehingga setiap item yang ditambahkan ke cache melalui metode ini dikaitkan dengan dependensi cache tunggal:
private void AddCacheItem(string rawKey, object value)
{
System.Web.Caching.Cache DataCache = HttpRuntime.Cache;
// Make sure MasterCacheKeyArray[0] is in the cache - if not, add it
if (DataCache[MasterCacheKeyArray[0]] == null)
DataCache[MasterCacheKeyArray[0]] = DateTime.Now;
// Add a CacheDependency
System.Web.Caching.CacheDependency dependency =
new CacheDependency(null, MasterCacheKeyArray);
DataCache.Insert(GetCacheKey(rawKey), value, dependency,
DateTime.Now.AddSeconds(CacheDuration),
System.Web.Caching.Cache.NoSlidingExpiration);
}
MasterCacheKeyArray
adalah array string yang menyimpan satu nilai, ProductsCache. Pertama, item cache ditambahkan ke cache dan diberi tanggal dan waktu saat ini. Jika item cache sudah ada, item tersebut akan diperbarui. Selanjutnya, dependensi cache dibuat.
CacheDependency
Konstruktor kelas memiliki sejumlah kelebihan beban, tetapi yang digunakan di sini mengharapkan dua string
input array. Yang pertama menentukan kumpulan file yang akan digunakan sebagai dependensi. Karena kita tidak ingin menggunakan dependensi berbasis file apa pun, nilai null
digunakan untuk parameter input pertama. Parameter input kedua menentukan kumpulan kunci cache yang akan digunakan sebagai dependensi. Di sini kita menentukan dependensi tunggal kita, MasterCacheKeyArray
. Kemudian CacheDependency
diteruskan ke dalam metode Insert
.
Dengan modifikasi ini ke AddCacheItem(key, value)
, membatalkan cache sesederhana menghapus dependensi.
[System.ComponentModel.DataObjectMethodAttribute(DataObjectMethodType.Update, false)]
public bool UpdateProduct(string productName, decimal? unitPrice, int productID)
{
bool result = API.UpdateProduct(productName, unitPrice, productID);
// Invalidate the cache
InvalidateCache();
return result;
}
public void InvalidateCache()
{
// Remove the cache dependency
HttpRuntime.Cache.Remove(MasterCacheKeyArray[0]);
}
Langkah 5: Memanggil Lapisan Cache dari Lapisan Presentasi
Kelas dan metode dari Lapisan Penembolokan dapat digunakan dalam pengolahan data menggunakan teknik yang telah kami pelajari di seluruh panduan-panduan ini. Untuk mengilustrasikan bekerja dengan data yang di-cache, simpan perubahan Anda ke ProductsCL
kelas lalu buka FromTheArchitecture.aspx
halaman di Caching
folder dan tambahkan GridView. Dari tag pintar GridView, buat ObjectDataSource baru. Di langkah pertama wizard, Anda akan melihat kelas ProductsCL
sebagai salah satu opsi dalam daftar drop-down.
Kelas ProductsCL dimasukkan dalam Daftar Objek Bisnis Drop-Down
Gambar 4: Kelas ProductsCL
Tercantum dalam Daftar Objek Bisnis Drop-Down (Klik untuk melihat gambar ukuran penuh)
Setelah memilih ProductsCL
, klik Berikutnya. Daftar drop-down di tab SELECT memiliki dua item - GetProducts()
dan GetProductsByCategoryID(categoryID)
, dan tab UPDATE memiliki satu UpdateProduct
overload.
GetProducts()
Pilih metode dari tab SELECT dan UpdateProducts
metode dari tab UPDATE dan klik Selesai.
Gambar 5: Metode dari Kelas s Telah Didaftar dalam Daftar Drop-Down (ProductsCL
)
Setelah menyelesaikan wizard, Visual Studio akan mengatur properti ObjectDataSource ke OldValuesParameterFormatString
original_{0}
dan menambahkan bidang yang sesuai ke GridView.
OldValuesParameterFormatString
Ubah properti kembali ke nilai defaultnya, {0}
, dan konfigurasikan GridView untuk mendukung penomoran, pengurutan, dan pengeditan.
UploadProducts
Karena kelebihan beban yang digunakan oleh CL hanya menerima nama dan harga produk yang diedit, batasi GridView sehingga hanya bidang ini yang dapat diedit.
Dalam tutorial sebelumnya, kami mendefinisikan GridView untuk menyertakan bidang untuk ProductName
, CategoryName
, dan UnitPrice
. Jangan ragu untuk mereplikasi pemformatan dan struktur ini, dalam hal ini markup deklaratif GridView dan ObjectDataSource Anda akan terlihat mirip dengan yang berikut ini:
<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>
Pada tahap ini, kita memiliki halaman yang menggunakan Lapisan Cache. Untuk melihat cache berfungsi, atur titik henti di metode ProductsCL
dan GetProducts()
dari kelas UpdateProduct
. Kunjungi halaman di browser dan ikuti kode langkah demi langkah saat proses pengurutan dan pembagian halaman untuk melihat data yang diambil dari cache. Kemudian perbarui catatan dan perhatikan bahwa cache tidak valid dan, akibatnya, rekaman diambil dari BLL saat data direbound ke GridView.
Nota
Lapisan Penembolokan yang disediakan dalam unduhan yang menyertai artikel ini tidak lengkap. Ini hanya terdiri dari satu kelas, ProductsCL
, yang memiliki beberapa metode. Selain itu, hanya satu halaman ASP.NET yang menggunakan CL (~/Caching/FromTheArchitecture.aspx
) yang lain masih mereferensikan BLL secara langsung. Jika Anda berencana menggunakan CL di aplikasi Anda, semua panggilan dari Lapisan Presentasi harus masuk ke CL, yang akan mengharuskan kelas dan metode CL mencakup kelas dan metode tersebut di BLL yang saat ini digunakan oleh Lapisan Presentasi.
Ringkasan
Meskipun penyimpanan sementara dapat diterapkan di Lapisan Presentasi dengan kontrol SqlDataSource dan ObjectDataSource milik ASP.NET 2.0, idealnya tanggung jawab penyimpanan sementara akan didelegasikan ke lapisan terpisah dalam arsitektur. Dalam tutorial ini, kami membuat lapisan cache yang berada di antara Lapisan Presentasi dan Lapisan Logika Bisnis. Lapisan Cache perlu menyediakan serangkaian kelas dan metode yang sama yang ada di BLL dan dipanggil dari Lapisan Presentasi.
Contoh Lapisan Cache yang kami jelajahi dalam tutorial ini dan sebelumnya menampilkan pemuatan reaktif. Dengan pemuatan reaktif, data dimuat ke dalam cache hanya ketika permintaan untuk data dibuat dan data tersebut hilang dari cache. Data juga dapat dimuat secara proaktif ke dalam cache, teknik yang memuat data ke dalam cache sebelum benar-benar diperlukan. Dalam tutorial berikutnya kita akan melihat contoh pemuatan proaktif ketika kita melihat cara menyimpan nilai statis ke dalam cache saat pengaktifan aplikasi.
Selamat Pemrograman!
Tentang Penulis
Scott Mitchell, penulis tujuh buku ASP/ASP.NET dan pendiri 4GuysFromRolla.com, telah bekerja sama dengan teknologi Microsoft Web sejak 1998. Scott bekerja sebagai konsultan, pelatih, dan penulis independen. Buku terbarunya adalah Sams Teach Yourself ASP.NET 2.0 dalam 24 Jam. Dia dapat dijangkau di mitchell@4GuysFromRolla.com.
Ucapan terima kasih khusus kepada
Seri tutorial ini ditinjau oleh banyak peninjau yang bermanfaat. Peninjau utama dari tutorial ini adalah Teresa Murph. Tertarik untuk meninjau artikel MSDN saya yang akan datang? Jika demikian, hubungi saya di mitchell@4GuysFromRolla.com.