ฉันพัฒนาเว็บไซต์มาหลายปีแล้ว ฉันมีความเข้าใจที่แตกต่างกันในบริษัทต่างๆ ฉันเพิ่งทำงานในโครงการบล็อก ฉันตระหนักถึงบทบาทของคลาสเทมเพลตในการพัฒนาเว็บ ฉันอยู่บ้านตอนกลางคืน ฉันคิดเสมอว่าฉันสามารถสร้างคลาสเทมเพลตที่ออกแบบมาเพื่อการพัฒนา asp.ne โดยเฉพาะ ดังนั้นฉันจึงเขียนคลาสเทมเพลตนี้
ดาวน์โหลดที่อยู่ คลิกที่นี่
เพียงเปลี่ยนชื่อไฟล์ 500sea.txt ที่ดาวน์โหลดมาเป็น Templet.rar แล้วเปิดขึ้นมา
ถ้าเปิด
http://img.club.163.com/images/user/other/500sea
ไม่มีข้อความแจ้งให้ดาวน์โหลดไฟล์ 500sea.txt จากนั้นใช้ Internet Express และเครื่องมืออื่นๆ เพื่อดาวน์โหลดที่อยู่นี้ และเปลี่ยนไฟล์ 500sea.txt ที่ดาวน์โหลดมาเป็นไฟล์ *.rar
ด้านล่างนี้เป็นไฟล์คำอธิบายด้านใน
//------------------------------------------------ -------------------------------------------------- -------------------------------------------------- ---------------------------//
แนะนำ:
คลาสเทมเพลตนี้เขียนขึ้นสำหรับการพัฒนาเว็บไซต์สถาปัตยกรรมสามระดับ คอมโพเนนต์ StringTempletReplet.dll
มีคลาสเทมเพลต คลาสเทมเพลตในเนมสเปซ StringTempletReplet สามารถใช้ในเลเยอร์ UI หรือ
เพื่อนำไปใช้ในชั้นลอจิก
************************************************** * ***************************
วิธีการวิ่ง:
สร้างไดเร็กทอรีเสมือนชื่อ Templet เพื่ออ้างอิงถึงโฟลเดอร์ Templet ที่คลายการบีบอัด
เรียกใช้ RetuenString.aspx ภายใน, ReturnText.aspx, WriteArticon.aspx,
หน้า LongLoop.aspx มีคำแนะนำที่เกี่ยวข้องในไฟล์ cs ที่สอดคล้องกับเพจ
เมื่อเปิดเพจเป็นครั้งแรก ควรบันทึกออบเจ็กต์ผู้รับมอบสิทธิ์และไฟล์เทมเพลตไว้ในแคช ดังนั้นความเร็วจริงจะขึ้นอยู่กับหน้าแรก
อีกครั้งหนึ่งในภายหลัง
************************************************** * ***************************
การแนะนำหลักการ:
เทมเพลตสำหรับการเปลี่ยนฉลาก ใช้เลขคณิตของพอยน์เตอร์ใน c# เพื่อค้นหาตำแหน่งป้ายกำกับ
ใช้วัตถุผู้รับมอบสิทธิ์เพื่อชี้ไปที่ฟังก์ชันการแยกวิเคราะห์ที่สอดคล้องกับแท็กรูปภาพ และใช้วัตถุแบบคงที่เพื่อแคชวัตถุผู้รับมอบสิทธิ์ทั้งหมด
แคชเนื้อหาเทมเพลตทั้งหมดโดยไม่ต้องเปลี่ยนเนื้อหาเทมเพลต เทมเพลตสามารถเปลี่ยนแปลงได้แบบไดนามิก
************************************************** * ***************************
แนะนำแท็ก:
เนื้อหาระหว่างคู่ของสัญลักษณ์พิเศษ {$ และ $} คือป้ายกำกับ
ชอบ
{$ชื่อแท็ก:พารามิเตอร์ 1:พารามิเตอร์ 2:พารามิเตอร์ 3::อักขระ 10$}
{$tagname:parameter1:parameter2::byte10$}
{$dt[5][ชื่อ]$}
ฉลากแบ่งออกเป็นสองส่วน (ส่วนพารามิเตอร์ฉลาก) และ (ส่วนควบคุมคำสั่ง) ผ่านสัญลักษณ์ :: ภายในฉลาก
{$tagname:parameter1:parameter2:parameter3::byte10$}
(ส่วนพารามิเตอร์แท็ก) :: (ส่วนควบคุมคำสั่ง)
ในสองส่วนนี้ ให้แยกส่วนพารามิเตอร์ป้ายกำกับและส่วนควบคุมคำสั่งด้วยเครื่องหมาย :
ส่วนพารามิเตอร์แท็ก --- ส่วนแรกคือชื่อแท็ก ซึ่งเป็นชื่อที่สอดคล้องกันของฟังก์ชันการแยกวิเคราะห์แท็ก และส่วนถัดไปคือพารามิเตอร์ของฟังก์ชัน
ฟังก์ชันการแยกวิเคราะห์แท็กยอมรับประเภทพารามิเตอร์ทั้งหมดเป็นประเภทสตริง และจำนวนพารามิเตอร์คือ 0-20
ฟังก์ชั่นประเภทการส่งคืนคือประเภทสตริง พารามิเตอร์สามารถฮาร์ดโค้ดบนฉลากหรือเขียนแบบไดนามิกได้
ส่วนควบคุมคำสั่ง --- ขณะนี้มีเพียงอักขระสัญลักษณ์คำสั่งและไบต์เพียงสองตัว ตามด้วยพารามิเตอร์ตัวเลข ซึ่งระบุถึงมาตรฐานการสกัดกั้น
ความยาวของผลการแยกวิเคราะห์ลายเซ็น เช่น 10 อักขระและ 10 ไบต์
ฉันจะขยายสัญลักษณ์คำสั่งและการควบคุมอื่น ๆ ในอนาคต
สำหรับการโต้ตอบระหว่างป้ายกำกับและฟังก์ชัน โปรดดูคำแนะนำในไฟล์ Business.cs
สำหรับกฎการใช้งานแท็กโดยเฉพาะ โปรดดูคำแนะนำใน template/templet/aa1.htm
สำหรับกฎการโทรเฉพาะ โปรดดูหน้า aspx สามหน้าในโปรเจ็กต์
WriteArticon.aspx - ระบบข่าวสารที่อ่านเทมเพลตและแยกวิเคราะห์ไฟล์ที่เขียนเพื่อสร้างเพจแบบคงที่
ReturnText.aspx - อ่านการแยกวิเคราะห์เทมเพลตและส่งคืนสตริง ใช้สำหรับเขียนเพจที่มักจำเป็นต้องเปลี่ยนรูปลักษณ์
หน้าสกิน. เทมเพลตสามารถเปลี่ยนแปลงได้แบบไดนามิก
RetuenString.aspx - ยอมรับสตริงแท็กและส่งกลับผลลัพธ์การแยกวิเคราะห์ มักใช้กับอาแจ็กซ์
************************************************** * ******************************
ป้ายกำกับค่าไดนามิก:
ฟังก์ชันการแยกวิเคราะห์แท็กสามารถรับพารามิเตอร์คงที่ที่ส่งผ่านในแท็กได้ มีสามวิธีในการยอมรับพารามิเตอร์แบบไดนามิก
หลังจากส่งวัตถุ Datatable และ Hashtable ไปยังคลาสเทมเพลตแล้ว
(Datatable ได้มาจากชั้นข้อมูล Hashtable โดยทั่วไปคือตัวแปรหน้าและตัวแปรอื่น ๆ )
1. dt[5][name] ---- หมายถึง รับค่าในคอลัมน์ชื่อ 5 แถวใน Datatable โดยอันแรกเป็นตัวเลข
ที่สองคือชื่อคอลัมน์
2. dt[name] ---- ภายนอกลูป หมายถึงการรับค่าในคอลัมน์ชื่อของแถว 0 ใน Datatable
พารามิเตอร์หนึ่งแสดงถึงชื่อคอลัมน์
---- ในลูปหมายถึงเอาค่าบนคอลัมน์ชื่อใน Datatable เอาไป
เส้นเหล่านี้ถูกกำหนดโดยพารามิเตอร์ของแท็กลูป
3. หน้า [PageId] ----- แสดงถึงการรับค่าบนคีย์ PageId ในวัตถุ Hashtable และส่งคืนประเภทสตริง
ตัวอย่างเช่น {$two parameter bookmarks:dt[3][word]:page[UserId]::Character 10$}
{$dt[5][name]$} {$dt[name]$} {$page[ รหัสหน้า ]$}
หรือ
{$dt[5][ชื่อ]::ตัวละคร 10$} {$dt[ชื่อ]::ตัวละคร 10$} {$page[PageId]::ตัวละคร 10$}
แท็กดังกล่าวบ่งชี้ว่าค่าในออบเจ็กต์แสดงบนเพจโดยตรง
************************************************** * ***************************
เรียกวิธีการเรียนแม่แบบภายในหน้าหรือชั้นเรียน:
สามารถเรียกได้ภายในเพจหรือคลาส
สร้างวัตถุและเชื่อมโยงคลาสการแยกวิเคราะห์ฟังก์ชันแท็กที่เกี่ยวข้อง
//ตรงนี้เราแค่ต้องเพิ่ม Business class object หลังบรรทัดนี้ new Business()
//การใช้อินเทอร์เฟซเพื่อปรับใช้ความหลากหลาย โค้ดดูยุ่งยากเล็กน้อย เมื่อคุณใช้มันด้วยตัวเอง เพียงแก้ไข "new Business()" สุดท้ายเป็นคลาสของคุณเองที่มีฟังก์ชันการแยกวิเคราะห์แท็ก
ILabelAnalyStart objILabel=(ILabelAnalyStart) new TempletReplet(new Business());
// อ่านแอตทริบิวต์พาธเทมเพลต
objILabel.ReadFilePath=this.Server.MapPath("templet/aa1.htm");
// เขียนแอตทริบิวต์เส้นทางไฟล์
objILabel.WritFilePath=this.Server.MapPath("page/aa1.html");
// รับวัตถุตารางข้อมูล
objILabel.LabelDatatable=ds.Tables[0];
//ส่งตัวแปรในหน้านี้ไปยังคลาสเทมเพลตโดยใช้วัตถุ Hashtable
objILabel.LabelHashtable=ht;
จากนั้นสามารถทำการแทนที่ได้สามครั้ง
//เริ่มแทนที่และเขียนเทมเพลต
objILabel.LaberReplet();
//ส่งคืนผลการแยกวิเคราะห์
สตริง aa=objILabel.LaberRepletText();
//ส่งคืนผลลัพธ์การแยกวิเคราะห์ ซึ่งจะยอมรับสตริงเทมเพลตโดยตรง ดูรายละเอียดในไฟล์ RetuenString.cs
string aa=objILabel.LaberRepletString();
สำหรับรายละเอียด โปรดดูไฟล์ cs ของทั้งสามไฟล์นี้
WriteArticon.aspx - ระบบข่าวสารที่อ่านเทมเพลตและแยกวิเคราะห์ไฟล์ที่เขียนเพื่อสร้างเพจแบบคงที่
ReturnText.aspx - อ่านการแยกวิเคราะห์เทมเพลตเพื่อส่งคืนสตริงและใช้เพื่อเขียนหน้าที่มักจะเปลี่ยนรูปลักษณ์
หน้าเปลี่ยนผิว
RetuenString.aspx - ยอมรับสตริงแท็กและส่งกลับผลลัพธ์ที่แยกวิเคราะห์ ที่ใช้กันทั่วไปกับอาแจ็กซ์
************************************************ *** *******************************
การเชื่อมโยงฟังก์ชันป้ายกำกับ:
โปรดดูรายละเอียดในไฟล์ Business.cs
ใน Constructor แบบคงที่ของคลาสที่สอดคล้องกับเลเยอร์ลอจิก ให้เพิ่มโค้ดต่อไปนี้
// เรียกตัวสร้างแบบคงที่และวางฟังก์ชันการเรียกใช้แท็กที่มอบหมายลงในตารางแฮชแบบคงที่
//วิธีนี้จะต้องดำเนินการ
ธุรกิจคงที่()
-
Business _this=new Business();
FunctionList.objFunctionHashtable.Add("ไม่มีบุ๊คมาร์คพารามิเตอร์",New KeyItemDelegate(new UserDelegate.Run_0(_this.show),0));
FunctionList.objFunctionHashtable.Add("หนึ่งพารามิเตอร์บุ๊คมาร์ค",new KeyItemDelegate (UserDelegate.Run_1 ใหม่ (_this.tag), 1));
FunctionList.objFunctionHashtable.Add("บุ๊กมาร์กพารามิเตอร์สองรายการ", KeyItemDelegate ใหม่ (UserDelegate.Run_2 ใหม่ (_this.tag_two),2));
//บุ๊กมาร์กเชื่อมโยงกับฟังก์ชันการดำเนินการ วางไว้ในตัวสร้างแบบคงที่ของคลาสการแยกวิเคราะห์บุ๊กมาร์ก นี่คือการใช้วัตถุในหน่วยความจำอย่างเต็มที่โดยไม่ต้องดำเนินการทุกครั้ง
// อักขระ "บุ๊กมาร์กพารามิเตอร์" สอดคล้องกับฟังก์ชันแท็กสตริงสาธารณะ (สตริง aa) โหมดที่เกี่ยวข้องคือการเพิ่มคีย์และค่าลงในตารางแฮช
// ("บุ๊คมาร์คพารามิเตอร์", KeyItemDelegate ใหม่ (UserDelegate.Run_1 ใหม่ (_this.tag), 1));
// ชื่อแท็ก |. |
// ใช้ผู้รับมอบสิทธิ์ Run_1 สำหรับหนึ่งพารามิเตอร์ -
// ฟังก์ชั่นการดำเนินการแท็กที่สอดคล้องกัน |
// สำหรับพารามิเตอร์ตัวหนึ่ง ให้เขียนหมายเลขหนึ่ง
// 0 หรือมากกว่าตัวอย่างที่เกี่ยวข้องข้างต้น
-
โปรดดูรายละเอียดในไฟล์ Business.cs
***************************************** * ***********************************
ข้อมูลเบื้องต้นเกี่ยวกับการวนซ้ำภายในแท็ก:
ลูปที่ไม่ซ้อนกันสามารถรับรู้ได้ผ่านสัญลักษณ์พิเศษบางอย่างในแท็ก
//------------------------------------------------ ---------------------------
{$loop(3,0,alter)$} //แสดงสามบรรทัด โดยเริ่มจากบรรทัด 0 หากมีคอลัมน์สลับกัน ให้เรียกใช้คอลัมน์สลับกัน
{$BlockItem$} // เส้นวนเริ่มต้น
<td bgcolor="#33ccff">หัวเรื่อง:{$dt[5][name]$} ผู้แต่ง:{$One parameter:dt[dddf]$}</td>
{$/รายการบล็อก$}
{$BlockAlterItem$} // สลับแถววนซ้ำ เมื่อไม่มีคู่ป้ายกำกับแถวเริ่มต้น ก็จะมีคู่ป้ายกำกับวนซ้ำสลับกัน ถือว่าคู่ป้ายกำกับที่สลับกันเป็นคู่ป้ายกำกับแถวเริ่มต้น
<td bgcolor="#ff6699">หัวเรื่อง:{$dt[5][name]$} ผู้แต่ง:{$one parameter:dt[dddf]$}</td>
{$/BlockAlterItem$}
{$BlockPatch$} //เมื่อจำนวนแถวที่จะวนซ้ำมากกว่าจำนวนแถวใน Datatable ให้ใช้เนื้อหาที่นี่เพื่อเสริมการแสดงผล หากไม่มีคู่แท็ก "เสริม" จากนั้นเมื่อจำนวนแถวที่แสดงมากกว่าจำนวนแถวใน Datatable ก็จะแสดงเฉพาะจำนวนแถวใน Datatable เท่านั้น
<td bgcolor="#33ccff">ส่วนเสริม (สามารถใช้แท็กภายในได้)</td>
{$/บล็อกแพทช์$}
{$BlockAlterPatch$} //ไม่มีคู่ป้ายกำกับเสริม แต่มีคู่ป้ายกำกับเสริมสำรอง ถือว่าคู่แท็กเสริมที่สลับกันเป็นคู่แท็กเสริม
<td bgcolor="#ff6699">ส่วนเสริมสำรอง (สามารถใช้แท็กภายในได้)</td>
{$/BlockAlterPatch$}
{$/loop$} //สิ้นสุดลูป
//------------------------------------------------ ---------------
{$BlockItem$} {$/BlockItem$}: คู่ป้ายกำกับแถววนซ้ำเริ่มต้น
{$BlockAlterItem$} {$/BlockAlterItem$} : วนคู่ป้ายกำกับแถวสลับกัน
{$BlockPatch$} {$/BlockPatch$}: คู่ป้ายกำกับบรรทัดเสริมที่เป็นค่าเริ่มต้น
{$BlockAlterPatch$} {$/BlockAlterPatch$}: สลับคู่ป้ายกำกับแถวเข้าด้วยกัน
//------------------------------ -- -----------------------
หากคุณมีเฉพาะลูปไลน์เริ่มต้น คุณจะไม่สามารถเพิ่มคู่แท็ก {$BlockItem$} ได้
ชอบ
{$วน(3,0,แก้ไข)$}
<tr><td>{$แท็กฟังก์ชัน$}</td></tr>
{$/ห่วง$}
และ
{$วน(3,0,แก้ไข)$}
{$BlockItem$}<tr><td>{$function label$}</td></tr>{$/BlockItem$}
{$/ห่วง$}
มันหมายถึงผลเช่นเดียวกัน
//------------------------------------------------ -------------
{$วน(3,0,แก้ไข)$}
{$BlockAlterPatch$}
<tr><td>{$แท็กฟังก์ชัน$}</td></tr>
{$/BlockAlterPatch$}
{$/ลูป$}
หากมีเฉพาะคู่ฉลากแถววงจรสลับกันและไม่มีคู่ฉลากแถววงจรสลับเริ่มต้น คู่ฉลากแถววงจรสลับจะถูกแปลงเป็นโดยอัตโนมัติ
คู่ป้ายกำกับบรรทัดวนซ้ำเริ่มต้น
//------------------------------------------------ ---------------
{$วน(3,0,แก้ไข)$}
{$BlockAlterPatch$}
<tr><td>{$แท็กฟังก์ชัน$}</td></tr>
{$/BlockAlterPatch$}
{$/ลูป$}
หากมีเฉพาะคู่ป้ายกำกับบรรทัดเสริมที่สลับกัน และไม่มีคู่ป้ายกำกับบรรทัดเสริมเริ่มต้น คู่ป้ายกำกับบรรทัดเสริมที่สลับกันจะถูกแปลงเป็นโดยอัตโนมัติ
คู่ป้ายกำกับบรรทัดวนซ้ำเริ่มต้น
************************************************** * **********************
คำอธิบายพารามิเตอร์ลูป:
{$วน(3,0,แก้ไข)$}
มีพารามิเตอร์สามตัวในลูปซึ่งสามารถลดขนาดได้อย่างเหมาะสม
พารามิเตอร์แรก:
3: วนซ้ำ 3 ครั้ง ไม่ใช่หมายถึงวนซ้ำทั้งหมด
พารามิเตอร์ที่สอง:
2: เริ่มจาก 2 ไม่ได้หมายความว่าเริ่มจาก 0
พารามิเตอร์ที่สาม:
เปลี่ยนแปลง: สลับกัน
noalter: ไม่มีการสลับ หากไม่มีข้อบ่งชี้ ค่าเริ่มต้นคือการสลับ ดังนั้นจึงจะเหมือนกันไม่ว่าจะเพิ่มหรือไม่ก็ตาม
หากละเว้นพารามิเตอร์ทั้งสาม ต้องมีวงเล็บว่างอย่างน้อยคู่ {$loop()$} ไว้
แสดงถึงจำนวนแถวในลูป Datatable
เริ่มต้นจากบรรทัด 0 หากมีส่วนเสริมก็จะแสดงส่วนเสริม
************************************************** * ***************************
มีการปรับปรุง ห่วงการปรับให้เหมาะสมเป็นหลัก
ตอนนี้จะใช้เวลา 300-400 มิลลิวินาทีในการวนซ้ำตารางที่มี 50,000 แถว
************************************************** * ***************************
ขอแนะนำว่าเทมเพลตไม่ควรมีขนาดใหญ่กว่า 85k และระวังอย่าให้กลายเป็นวัตถุขนาดใหญ่ ขอแนะนำว่าจำนวนเทมเพลตหน้าสำหรับออบเจ็กต์รุ่นที่สองควรน้อยกว่าหรือเท่ากับ 919 และจำนวนแท็กฟังก์ชันที่เกี่ยวข้องไม่ควรเกิน 1597
เป็นเรื่องดีที่ได้เห็นคลาสเทมเพลตเติบโตไปพร้อมกับความเข้าใจของฉันเอง
************************************************** * ***************************