เบราว์เซอร์ยูนิโค้ด
เว็บแอปพลิเคชัน Blazor C# สำหรับการเรียกดูฐานข้อมูลอักขระ Unicode
แอปพลิเคชันโฮสต์อยู่ที่นั่น: https://unicode-browser.azurewebsites.net/home
คุณสมบัติ
- สลายข้อความในจุดรหัส Unicode
- ดูข้อมูลโดยละเอียดเกี่ยวกับจุดโค้ด
- เรียกดูจุดโค้ดใน Unicode Block ที่กำหนด
- ค้นหาอักขระตามชื่อ
- แสดงข้อมูลเพิ่มเติม (ในรูปแบบ Markdown) ในหน้าเฉพาะสำหรับบล็อก Unicode
ลองมันดู
ต่อไปนี้เป็น URL บางส่วนที่คุณสามารถลองใช้ได้เพื่อดูการทำงานของแอปพลิเคชัน:
- https://unicode-browser.azurewebsites.net/blocks/Miscellaneous%20Symbols%20and%20Pictographs
- https://unicode-browser.azurewebsites.net/codepoints/1F365
- https://unicode-browser.azurewebsites.net/search?q=Tree
- https://unicode-browser.azurewebsites.net/decomposition?text=????????
- https://unicode-browser.azurewebsites.net/blocks/Tangut
- https://unicode-browser.azurewebsites.net/blocks/Tags
เทคโนโลยีหลักที่ใช้
- ASP.NET Core 3.0 (.NET Core 3.0.0-preview8.19405.7)
- เบลเซอร์
- มาร์คดิก 0.17.1
- บูทสแตรป 4.1
- แบบอักษรสุดเจ๋ง 5.0.10
- jQuery 3.3.1 (เนื่องจาก Bootstrap JS ยังคงต้องการ)
ลิงค์เอกสารประกอบ
เอกสารประกอบของ Blazor มีอยู่ที่ docs.microsoft.com
เรื่องราวเบื้องหลัง
แอปพลิเคชันนี้ส่วนใหญ่เขียนขึ้นครั้งแรกเมื่อต้นปี 2559 โดยใช้เวอร์ชันตัวอย่างของ ASP.NET Core, TypeScript และ Aurelia ในเวลานั้น นี่เป็นโอกาสที่จะได้เรียนรู้เกี่ยวกับเฟรมเวิร์กใหม่ๆ เหล่านั้น และมันก็ได้ผลดีมาก
ซอร์สโค้ดของเวอร์ชันปัจจุบันส่วนใหญ่เป็นการดัดแปลงจากต้นแบบในยุคแรกๆ อย่างตรงไปตรงมา ในความเป็นจริง รหัสเซิร์ฟเวอร์ส่วนใหญ่ถูกย้ายไปยัง ASP.NET Core 2.1 โดยมีการแก้ไขเพียงเล็กน้อยเท่านั้น
อย่างไรก็ตาม ส่วนของไคลเอ็นต์คือจุดที่ "ความสนุก" อยู่ เนื่องจากมีเพียงส่วน HTML เท่านั้นที่สามารถนำมาใช้ซ้ำได้ (และยังคงต้องมีการโยกย้ายไปยัง Bootstrap 4 / Fontawesome 5) นี่เป็นโอกาสที่ดีในการทดสอบและเรียนรู้วิธีใช้ Blazor อีกครั้ง เช่นเดียวกับการติดตามเทคโนโลยีอื่น ๆ ให้ทันสมัยอยู่เสมอ
ก็อตชาส
Blazor เป็นเทคโนโลยีใหม่มาก ซึ่งยังอยู่ในช่วงแสดงตัวอย่างก่อนกำหนด และบางครั้งก็จัดการได้ยาก
ด้วยเหตุนี้ ฉันพบว่าตัวเองสะดุดกับสิ่งที่ฉันคิดว่าเป็นเรื่องเล็กน้อย และฉันรู้สึกว่าฉันต้องเขียนโค้ดสำเร็จรูปจำนวนมากเพื่อให้สิ่งเหล่านี้ทำงานได้
เช่น
* ฉันค่อนข้างผิดหวังที่ไม่สามารถแชร์คลาส Model ของฉันระหว่างเซิร์ฟเวอร์และไคลเอนต์ได้ เนื่องจากปัจจุบัน Blazor ใช้ SimpleJson ซึ่งมีข้อจำกัดอย่างมาก - (และน่าเศร้าที่ Newtonsoft.Json ดูเหมือนจะทำงานได้ไม่ดีพอในตอนนี้ ?)
- การเชื่อมโยงกับพารามิเตอร์สตริงการสืบค้นจะต้องดำเนินการด้วยตนเอง
- บางครั้งเพจจำเป็นต้องรับฟังการเปลี่ยนแปลงตำแหน่งด้วยตนเอง (เช่น การเปลี่ยน URL ในหน้าเดียวกัน)
- ไม่มีการจัดการของรัฐนอกกรอบ (เช่น จะเกิดอะไรขึ้นเมื่อคุณย้อนกลับไปและส่งต่อในประวัติศาสตร์) => ฉันแก้ไขมันได้โดยไม่จำเป็นต้องมีการจัดการสถานะเลย และอาศัยเส้นทางหรือสตริงการสืบค้นสำหรับสิ่งนั้นเสมอ
- วงจรชีวิตของส่วนประกอบดูเหมือนจะไม่สามารถขยายได้มากนัก: เป็นการยากที่จะเพิ่มพฤติกรรมที่ซับซ้อนในคลาสพื้นฐาน (เช่น การแสดงตัวหมุนก่อนที่จะโหลดเนื้อหา)
สิ่งต่าง ๆ ได้รับการปรับปรุงใน 3.0 (ตอนนี้พารามิเตอร์เส้นทางถูกถอดรหัสแล้ว ?) แต่ฉันคิดว่าประเด็นส่วนใหญ่ยังคงเป็นจริง
สิ่งแปลกใหม่สำหรับ .NET Core 3.0:
- System.Text.Json เป็นซีเรียลไลเซอร์ JSON ใหม่ (ค่าเริ่มต้น) สำหรับ Blazor อย่างไรก็ตาม ขอบจะหยาบมาก การไม่สามารถดีซีเรียลไลซ์ประเภทที่ไม่เปลี่ยนรูปออกจากกล่องได้ถือเป็นเรื่องน่าปวดหัวอย่างยิ่ง - => ฉันใช้ JsonConverter เพื่อจัดการกรณีเฉพาะนี้ ด้วยการอาศัยการสร้างโค้ดแบบไดนามิก เราสามารถสร้างประเภทที่ API ใหม่จะยอมรับในการดีซีเรียลไลซ์ จากนั้นจึงสร้างประเภทที่ไม่เปลี่ยนรูปแบบขึ้นมา
- ในการแสดงตัวอย่าง 8 โปรเจ็กต์ไคลเอ็นต์ของ Blazor ยังคงต้องกำหนดเป้าหมายเป็น .NET Standard 2.0 ไม่ใช่ .NET Standard 2.1