Saya telah melakukan pengembangan web selama beberapa tahun. Saya memiliki pemahaman yang berbeda di perusahaan yang berbeda. Saya baru-baru ini mengerjakan proyek blog. Saya menyadari peran kelas template dalam pengembangan web. Saya di rumah pada malam hari. Saya selalu berpikir bahwa saya bisa membuat kelas template yang dirancang khusus untuk pengembangan asp.ne. Jadi saya menulis kelas template ini.
Alamat unduh klik di sini
Ganti saja nama file 500sea.txt yang diunduh menjadi Templet.rar dan buka.
jika terbuka
http://img.club.163.com/images/user/other/500sea
Tidak ada perintah untuk mengunduh file 500sea.txt. Kemudian gunakan Internet Express dan alat lainnya untuk mengunduh alamat ini dan mengubah file 500sea.txt yang diunduh menjadi file *.rar.
Di bawah ini adalah file deskripsi di dalamnya
//------------------------------------------------ --------------------------------------------------- --------------------------//
memperkenalkan:
Kelas templat ini ditulis untuk pengembangan situs web arsitektur tiga tingkat. Komponen StringTempletReplet.dll
Berisi kelas templat. Kelas templat di namespace StringTempletReplet dapat digunakan di lapisan UI atau
untuk digunakan pada lapisan logika.
******************************************************* * ***************************
Cara menjalankannya:
Buat direktori virtual bernama Templet untuk merujuk ke folder Templet yang didekompresi.
Jalankan RetuenString.aspx internal, ReturnText.aspx, WriteArticon.aspx,
halaman LongLoop.aspx. Ada instruksi yang sesuai pada file cs yang sesuai dengan halaman tersebut.
Saat halaman dibuka untuk pertama kali, objek delegasi dan file template harus disimpan dalam cache, sehingga kecepatan sebenarnya bergantung pada halaman pertama.
Suatu saat nanti.
******************************************************* * ***************************
Pengenalan prinsip:
Templat untuk penggantian label. Menggunakan aritmatika penunjuk di c# untuk menemukan lokasi label.
Gunakan objek delegasi untuk menunjuk ke fungsi penguraian yang sesuai dengan tag gambar, dan gunakan objek statis untuk menyimpan semua objek delegasi dalam cache.
Simpan seluruh konten templat dalam cache tanpa mengubah badan templat. Template dapat diubah secara dinamis.
******************************************************* * ***************************
Pengenalan tanda:
Isi antara pasangan simbol khusus {$ dan $} adalah label
menyukai
{$Nama tag:Parameter 1:Parameter 2:Parameter 3::Karakter 10$}
{$namatag:parameter1:parameter2::byte10$}
{$dt[5][nama]$}
Label dibagi menjadi dua bagian (bagian parameter label) dan (bagian kontrol perintah) melalui simbol :: di dalam label.
{$namatag:parameter1:parameter2:parameter3::byte10$}
(Bagian parameter tag) :: (Bagian kontrol perintah)
Pada kedua bagian ini, pisahkan bagian parameter label dan bagian kontrol perintah dengan tanda :.
Bagian parameter tag---yang pertama adalah nama tag, yang merupakan nama terkait dari fungsi penguraian tag, dan yang berikutnya adalah parameter fungsi.
Fungsi penguraian tag menerima semua tipe parameter sebagai tipe string, dan jumlah parameter adalah 0-20.
Fungsi, tipe kembaliannya adalah tipe string. Parameter dapat dikodekan secara keras pada label atau ditulis secara dinamis.
Bagian kontrol perintah---sekarang hanya ada dua karakter simbol perintah dan byte, diikuti dengan parameter numerik, yang menunjukkan standar intersepsi
Panjang hasil parsing tanda tangan, misalnya 10 karakter dan 10 byte.
Saya akan memperluas simbol perintah dan kontrol lainnya di masa mendatang.
Untuk korespondensi antara label dan fungsi, silakan lihat petunjuk di file Business.cs.
Untuk aturan penggunaan tag yang spesifik, silakan lihat petunjuk di template/templet/aa1.htm.
Untuk aturan panggilan spesifik, silakan lihat tiga halaman aspx di proyek.
WriteArticon.aspx - Sistem berita yang membaca templat dan mem-parsing file tertulis untuk menghasilkan halaman statis
ReturnText.aspx - Membaca penguraian templat dan mengembalikan string, digunakan untuk menulis halaman yang sering kali perlu diubah tampilannya.
Halaman berkulit. Template dapat diubah secara dinamis.
RetuenString.aspx - menerima string tag dan mengembalikan hasil penguraian. Biasa digunakan dengan ajax.
******************************************************* * *******************************
Label nilai dinamis:
Fungsi penguraian tag dapat menerima parameter tetap yang diteruskan dalam tag. Ada tiga cara untuk menerima parameter dinamis
Setelah meneruskan objek Datatable dan Hashtable ke kelas template
(Datatable diperoleh dari lapisan data, Hashtable umumnya berupa variabel halaman dan variabel lainnya)
1. dt[5][nama] ---- artinya mendapatkan nilai pada kolom nama 5 baris di Datatable, yang pertama adalah angka,
Yang kedua adalah nama kolom
2. dt[name] ---- Di luar loop, artinya mengambil nilai pada kolom nama baris 0 di Datatable.
Satu parameter mewakili nama kolom
---- Dalam loop, artinya mengambil nilai pada kolom nama di Datatable, ambil itu
Garis-garis ini ditentukan oleh parameter tag loop.
3. page[PageId] ----- Mewakili pengambilan nilai pada kunci PageId di objek Hashtable dan mengembalikan tipe string
Misalnya, {$dua parameter bookmark:dt[3][kata]:halaman[UserId]::karakter 10$}
{$dt[5][nama]$} {$dt[nama]$} {$halaman[ ID Laman ]$}
atau
{$dt[5][nama]::Karakter 10$} {$dt[nama]::Karakter 10$} {$page[PageId]::Karakter 10$}
Tag seperti itu menunjukkan bahwa nilai dalam objek ditampilkan langsung di halaman.
******************************************************* * ***************************
Panggil metode kelas templat di dalam halaman atau kelas:
Dapat dipanggil dalam satu halaman atau kelas
Hasilkan objek dan kaitkan kelas penguraian fungsi tag yang sesuai
//Di sini kita hanya perlu menambahkan objek kelas Bisnis setelah baris ini new Business()
//Menggunakan antarmuka untuk mengimplementasikan polimorfisme, kodenya terlihat agak rumit. Saat Anda menggunakannya sendiri, cukup ubah "Bisnis baru ()" terakhir ke kelas Anda sendiri yang berisi fungsi penguraian tag.
ILabelAnalyStart objILabel=(ILabelAnalyStart) new TempletReplet(new Business());
//Baca atribut jalur templat
objILabel.ReadFilePath=this.Server.MapPath("templet/aa1.htm");
//Tulis atribut jalur file
objILabel.WritFilePath=this.Server.MapPath("page/aa1.html");
//Dapatkan objek tabel data
objILabel.LabelDatatable=ds.Tables[0];
//meneruskan variabel pada halaman ini ke kelas templat menggunakan objek Hashtable
objILabel.LabelHashtable=ht;
Kemudian tiga penggantian dapat dicapai
//Mulai mengganti dan menulis template
objILabel.LaberReplet();
//mengembalikan hasil penguraian
string aa=objILabel.LaberRepletText();
//Kembalikan hasil parsing. Ini secara langsung menerima string template. Lihat file RetuenString.cs untuk detailnya.
string aa=objILabel.LaberRepletString();
Untuk detailnya, silakan lihat file cs dari ketiga file ini
WriteArticon.aspx - Sistem berita yang membaca templat dan mem-parsing file tertulis untuk menghasilkan halaman statis
ReturnText.aspx - Baca penguraian template untuk mengembalikan string dan menggunakannya untuk menulis halaman yang sering mengubah tampilannya.
Halaman ganti kulit
RetuenString.aspx - menerima string tag dan mengembalikan hasil yang diurai. Biasa digunakan dengan ajax
************************************************* ************************************
Asosiasi fungsi label:
Silakan lihat file Business.cs untuk detailnya.
Di konstruktor statis kelas yang sesuai dengan lapisan logika, tambahkan kode berikut.
//Panggil konstruktor statis dan tempatkan delegasi fungsi eksekusi tag ke dalam tabel hash statis
//Metode ini harus dijalankan
Bisnis statis()
{
Bisnis _ini=Bisnis baru();
(
"Tidak ada penanda parameter",KeyItemDelegate baru(UserDelegate.Run_0(_this.show),0));
KeyItemDelegate(UserDelegate.Run_1(_this.tag) baru,1));
FunctionList.objFunctionHashtable.Add("Dua parameter bookmark",KeyItemDelegate baru(UserDelegate.Run_2(_this.tag_two),2));
//Bookmark dikaitkan dengan fungsi eksekusi. Letakkan di konstruktor statis kelas parsing bookmark. Ini untuk menggunakan objek dalam memori sepenuhnya tanpa mengeksekusinya setiap saat.
// Karakter "Parameter bookmark" sesuai dengan fungsi tag string publik (string aa). Mode yang sesuai adalah menambahkan kunci dan nilai ke tabel hash.
// ("Bookmark parameter", KeyItemDelegate baru (UserDelegate.Run_1 (_this.tag) baru, 1));
// nama tag |
// Gunakan delegasi Run_1 untuk satu parameter. |
// Fungsi eksekusi tag yang sesuai |
// Untuk satu parameter, tuliskan angka satu
// 0 atau lebih contoh terkait di atas
}
Silakan lihat file Business.cs untuk detailnya
********************************************* * ***********************************
Pengantar perulangan di dalam tag:
Perulangan tidak bersarang dapat diimplementasikan dengan menggunakan beberapa simbol khusus di dalam tag.
//------------------------------------------------ --------------------------
{$loop(3,0,alter)$} //Menampilkan tiga baris, dimulai dari baris 0. Jika ada kolom bergantian, jalankan kolom bergantian.
{$BlockItem$} //Garis loop default,
<td bgcolor="#33ccff">Judul:{$dt[5][nama]$}, Penulis:{$Satu parameter:dt[dddf]$}</td>
{$/BlockItem$}
{$BlockAlterItem$} // Baris loop bergantian Jika tidak ada pasangan label baris default, maka ada pasangan label loop alternatif. Perlakukan pasangan label bergantian sebagai pasangan label baris default
<td bgcolor="#ff6699">Judul:{$dt[5][nama]$}, penulis:{$satu parameter:dt[dddf]$}</td>
{$/BlockAlterItem$}
{$BlockPatch$} //Ketika jumlah baris yang akan diulang lebih besar dari jumlah baris dalam Datatable, gunakan konten di sini untuk melengkapi tampilan. Jika tidak ada pasangan tag "tambahan". Kemudian ketika jumlah baris yang ditampilkan lebih besar dari jumlah baris pada Datatable, maka hanya jumlah baris pada Datatable yang akan ditampilkan.
<td bgcolor="#33ccff">Suplemen (tag juga dapat digunakan di dalam)</td>
{$/BlockPatch$}
{$BlockAlterPatch$} //Tidak ada pasangan label tambahan, tetapi ada pasangan label tambahan alternatif. perlakukan pasangan tag tambahan bergantian sebagai pasangan tag tambahan
<td bgcolor="#ff6699">Suplemen alternatif (tag juga dapat digunakan di dalam)</td>
{$/BlockAlterPatch$}
{$/loop$} //akhir perulangan
//------------------------------------------------ ---------------
{$BlockItem$} {$/BlockItem$}: Pasangan label baris perulangan default
{$BlockAlterItem$} {$/BlockAlterItem$} : Menggilir pasangan label baris secara bergantian
{$BlockPatch$} {$/BlockPatch$}: Pasangan label baris tambahan default
{$BlockAlterPatch$} {$/BlockAlterPatch$}: Secara bergantian melengkapi pasangan label baris
//------------------------------- -- -----------------------
Jika Anda hanya memiliki baris loop default, Anda tidak dapat menambahkan pasangan tag {$BlockItem$}.
menyukai
{$loop(3,0,ubah)$}
<tr><td>{$tag fungsi$}</td></tr>
{$/putaran$}
Dan
{$loop(3,0,ubah)$}
{$BlockItem$}<tr><td>{$label fungsi$}</td></tr>{$/BlockItem$}
{$/putaran$}
Artinya efeknya sama
//------------------------------------------------ -------------
{$loop(3,0,ubah)$}
{$BlockAlterPatch$}
<tr><td>{$tag fungsi$}</td></tr>
{$/BlockAlterPatch$}
{$/putaran$}
Jika hanya ada pasangan label baris siklus bergantian dan tidak ada pasangan label baris siklus default, maka pasangan label baris siklus bergantian secara otomatis akan dikonversi menjadi
Pasangan label garis loop default
//------------------------------------------------ ---------------
{$loop(3,0,ubah)$}
{$BlockAlterPatch$}
<tr><td>{$tag fungsi$}</td></tr>
{$/BlockAlterPatch$}
{$/putaran$}
Jika hanya ada pasangan label baris tambahan bergantian dan tidak ada pasangan label baris tambahan default, maka pasangan label baris tambahan bergantian secara otomatis akan dikonversi menjadi
Pasangan label garis loop default
******************************************************* * **********************
Deskripsi parameter lingkaran:
{$loop(3,0,ubah)$}
Ada tiga parameter dalam loop, yang dapat dikurangi dengan tepat.
Parameter pertama:
3: Ulangi sebanyak 3 kali, tidak berarti mengulang semua
Parameter kedua:
2: Mulai dari 2, bukan berarti memulai dari 0
Parameter ketiga:
mengubah: alternatif
noalter: tidak ada pergantian. Kalau tidak ada indikasi, defaultnya adalah pergantian, jadi sama saja alter ditambahkan atau tidak.
Jika ketiga parameter dihilangkan, setidaknya sepasang tanda kurung kosong {$loop()$} harus dipertahankan.
Mewakili jumlah baris dalam loop Datatable
Mulai dari baris 0, jika ada suplemen maka akan ditampilkan suplemen tersebut.
******************************************************* * *************************
Telah ada pembaruan. Terutama putaran pengoptimalan.
Sekarang dibutuhkan 300-400 milidetik untuk mengulang tabel dengan 50.000 baris.
******************************************************* * *************************
Disarankan agar templat tidak lebih besar dari 85k, dan berhati-hatilah agar tidak menjadi objek berukuran besar. Direkomendasikan agar jumlah templat halaman untuk objek generasi kedua kurang dari atau sama dengan 919, dan jumlah tag fungsi terkait tidak boleh melebihi 1597.
Sangat menyenangkan melihat kelas templat berkembang seiring dengan pemahaman saya sendiri.
******************************************************* * ***************************