摘要:每年都會有大批外國留學生來我國高校進修學習,為進一步提升教務管理效率,提高教師的教學水平,學院計劃開發一套教學信息管理系統,實現對留學生漢語課程教學的信息化管理。文章通過對某大學漢語學院教學信息管理系統的設計與實施,討論ASP.NET框架在教學信息管理系統中的具體應用。
關鍵詞:教學信息管理系統;ASP.NET框架;世界協調時間;進程同步
中圖分類號:TP311.1 文獻標志碼:A
0 引言
國內某工程大學,每年秋季入學季都有大約300名留學生到漢語學院學習語言。對留學生的漢語水平測試及入學分班是一項繁雜的工作,學院希望能通過信息化技術解決人工操作效率低下且容易出錯的問題,因此決定開發“教學信息管理系統”,用于新生入學分班及后續的課程管理和教學評估。該系統分別對教務人員、教師以及學生等3類操作人員提供支持。
1 需求分析
1.1 需求描述
通過對教務人員工作的實際分析后確定,本系統要為教務人員提供教學信息管理功能,還要為教師及學生提供常規的相關功能[1]。教務人員通過本系統管理教師及學生的基本信息,進行課程及教材管理,為學生進行入學分班,為教師安排課程等。教師可通過本系統對所上課程的班級進行考勤管理、考試管理以及期末成績管理。學生則通過登錄學生端進行選修課選課、課程和成績查看以及學期結束后對任課教師的教學工作進行評價和評分,再由教務人員對評價評分進行匯總統計,以對教師本學期的教學工作進行考核。
1.2 功能模塊
因學習目的不同,學院設立了3種班型,分別為預科班、長期班和強化班。本系統綜合考慮3種班型的個性化屬性,將系統劃分為4個主要功能模塊,分別為系統管理模塊、教輔管理模塊、教學管理模塊和學生端模塊。
1.2.1 系統管理模塊
系統管理模塊要求登錄用戶具有管理員權限。賬號管理功能用于管理系統登錄賬號,提供賬號的開通與鎖定,權限的分配與管理。教師管理功能用于管理教師基本資料,為教師分配登錄賬號。日志管理功能提供系統異常日志、數據庫日志以及登錄日志,用于系統日常運行的管理工作,以保證系統安全穩定運行。
1.2.2 教輔管理模塊
教輔管理模塊要求登錄用戶具有教務人員權限。學籍管理功能用于學生檔案資料的查詢和修改,可查詢學生歷年來在院的學習課程和成績等資料。教材管理功能用于管理漢語教學使用的教材,教材用于必修課及選修課。學生分班功能用于秋季新生入學時的選擇教材及分班。選修課管理功能用于選修課程的管理,設置選修課的選課規則,包括選課時間段、要求的漢語水平以及每門課程最大的選課人數等。班級管理用于分班后班級的日常管理工作,查看班級學生的考勤與成績,管理任課教師,為學生調班等。評估管理功能用于教學評估調查表的管理工作,教務人員在每學期期末為各課程設置調查問卷,學生填寫后系統匯總統計。
1.2.3 教學管理模塊
教學管理模塊要求登錄用戶具有教師權限。考勤管理功能用于填寫本班學生的考勤情況,出勤天數、遲到早退情況、病事假天數等。考試管理功能用于填報本班學生月考及期末考試的成績。評估結果查看功能允許教師在每學期末學生填寫完評估問卷后查看匯總的評估結果。
1.2.4 學生端模塊
學生可使用學號及密碼登錄教學信息管理系統的學生端,學生賬號無法登錄管理端。選修課功能為學生提供線上選課服務,學生在教務人員設定的規則范圍內選課,待教務人員確認后不可更改。成績查看功能允許學生查看各學期的所學課程及最終成績。課程評分功能是在每個學期結束且課程給出期末總成績后由學生對任課教師填寫的評估問卷。
2 系統實現
2.1 概要設計
2.1.1 硬件環境
系統使用由學校統一管理的Windows Server服務器,配備RAID5磁盤陣列,專線接入教育網,學校機房統一配置了硬件防火墻等相關安全設施并由專門的管理人員負責網絡安全維護工作。另外,分配一個學校網址的二級域名并以NAT方式綁定至內網服務器供信息系統使用。
2.1.2 開發環境
系統基于ASP.NET框架開發[2-3]。ASP.NET借鑒了VB、C/C++、Java等編程技術和語言的優點,舍棄了諸如指針和多重繼承等過于復雜或難以理解的部分,由垃圾回收機制統一進行內存空間的回收工作,無須使用如free命令等函數顯示的釋放內存,以便于研發人員能夠將更多的精力放在對業務邏輯的理解和系統結構的設計,而不是過多地陷入細枝末節的程序代碼。
ASP.NET采用編譯執行的方式,因此應用程序可獲得較高的性能。但與傳統意義上的編譯方式不同,ASP.NET應用程序編譯后會先形成中間語言,因此ASP.NET可以支持例如VB.NET、C#等多種編程語言。此外,ASP.NET采用了類似Java虛擬機的運行方式,編譯后的中間語言可在Windows平臺下由.NET Framework負責解釋執行,也可在Linux平臺下由Mono服務負責解釋執行,因此,ASP.NET也具有很好的跨平臺性。
2.1.3 系統架構
系統采用3層架構模式[4],分別為表示層、業務邏輯層以及數據訪問層。3層架構模式將數據存儲、業務邏輯和用戶交互進行邏輯上的分離,從而有效降低系統復雜度,提升開發效率。
表示層用于數據的展示、用戶與系統之間的交互處理以及合法性驗證等。頁面遵循HTML5及CSS3語法規范,通過基于jQuery的Bootstraps技術實現響應式布局,支持系統在電腦端、手機端以及其他智能設備上的正常使用。
業務邏輯層包含系統的核心邏輯,業務層接收表示層的調用執行相應的業務邏輯,將相關數據通過數據訪問層寫入數據庫。ASP.NET提供的前后端分離技術很好地保證了業務層和表示層的獨立和分離,使得前端工程師和后端工程師包括數據庫工程師可以各自獨立開展研發工作,最后進行集中的聯調與測試。
數據訪問層提供了對數據庫的基本操作,包括添加、修改、刪除以及查詢,通過ADO.NET實現對SQL命令或存儲過程的執行。數據層不進行業務邏輯上的運算和數據合規性的校驗,相應的工作須要由上層的業務邏輯層完成。
2.2 關鍵技術點
2.2.1 數據持久化
系統采用SQL Server數據庫用于數據的持久化存儲。SQL Server數據庫是一款常用的企業級關系型數據庫解決方案,完全可以滿足學院的教學信息數據存儲需求,同時,SQL Server數據庫與ASP.NET技術體系也有著極高的契合度。
在數據訪問層,ASP.NET技術體系通過ADO.NET技術建立數據庫與實體對象之間的映射關系[5]。ADO.NET中使用DataSet用于實際的數據存儲,DataSet由多個DataTable數據表及表之間的關聯組成,使用DataProvider負責實際的數據庫通信,執行實際的數據庫操作,其中Connection對象負責維護應用程序與數據庫之間的鏈接,Command對象用于存放操作命令或存儲過程名稱,DataReader用于對實際數據庫的正向只讀操作,DataAdapter用于在數據庫數據和DataSet數據之間建立關聯并使數據保持一致。
本系統中設計的數據實體對象與數據庫表一一對應,對象名對應為表名,對象屬性對應為表字段名,全部數據庫操作命令均使用數據庫存儲過程,數據訪問層程序以參數化方式通過存儲過程名調用存儲過程以執行數據的插入、修改、刪除以及查詢操作,參數化查詢可以有效避免系統受到SQL注入攻擊。通過SQL分頁方式避免一次性讀取過多數據而導致應用程序產生性能問題。同時要求數據庫禁止使用NULL值,NULL值會導致查詢條件失效造成全表掃描。
2.2.2 數據緩存
系統中存在大量需要反復讀取顯示并且產生之后一般情況下不會發生變動的數據,比如課程類型、班級數據等,如果每次展示都去直接讀取數據庫,必然會造成大量頻繁的I/O操作,存在嚴重的性能問題。因此,系統采用數據緩存技術,將業務數據按主鍵以Key-Value形式存入緩存,以減少系統直接對數據庫的訪問。讀取數據時,系統先嘗試從緩存中讀取,若命中緩存則可以立即返回結果數據,只有在未命中緩存時才轉入數據訪問層進行實際數據庫查詢,當查詢有結果時直接將結果寫入緩存并返回數據,否則返回數據不存在。為了防止系統持續命中緩存導致無法感知數據庫中的數據發生變化,要為寫入緩存的數據設置一個緩存過期時間,以定期重置緩存數據。
數據緩存通常使用鍵值對形式的非關系型數據庫,對于大規模的數據系統可以使用可分布式的高速緩存系統[6],常見的如Memcached或者Redis,小型系統可以直接使用ASP.NET自身提供的內部緩存服務。
本系統采用ASP.NET內置的Cache緩存服務進行緩存數據的存儲。須要注意的是,并非所有數據都適合使用緩存,為了保證系統具有較高的緩存命中率,只有內容相對固定且須要頻繁讀取的數據才適合使用緩存,而其他的比如常見的多條件查詢或者經常變動的數據則不適合使用緩存。
2.2.3 時區轉換
為保證系統中所涉及的時間特性保持唯一性,避免跨時區操作時造成用戶的誤解,本系統中所有日期時間類型數據均取UTC時間作為標準時間保存在數據庫,在實際應用和展示時臨時轉為用戶當地時間。因此,要為系統中的每個用戶都設置一個所在時區,為未設置時區或者設置時區過期無效的用戶獲取一個當前時區。
登錄用戶發起請求后,首先要進行用戶身份的驗證以確認當前用戶有使用本系統的權限并且留下身份標識信息,其中包含用戶的時區配置信息。如果用戶未配置時區信息,則使用用戶所在地的時區信息。系統通過獲取當前用戶所使用的IP地址,在IP地址庫中檢索確定此IP地址的所在地及所在時區,然后將所在時區信息寫入用戶信息,這樣在后續的請求中系統可以直接使用被寫入的時區信息,也可以在用戶信息管理界面中手動更改用戶的所在時區,只要設定的時區是有效的,系統就不會觸發根據IP地址確定時區的計算邏輯。
ASP.NET提供了TimeZoneInfo對象用于處理時區時間的轉換,使用ConvertTimeFromUtc方法可將UTC時間轉為指定時區的時間,使用ConvertTimeToUtc方法將某時區時間轉換為UTC時間。須要注意的是,在具有夏令時的時區,會存在重復的時間和不存在的時間,其中重復的時間可以通過IsDaylightSavingTime字段加以區分,而不存在的時間就要在程序上提前做好判斷,因為嘗試將一個不存在的時間轉化為世界協調時間(Universal Time Coordinated, UTC)時會導致時間轉換失敗從而引發系統異常。
2.2.4 全球化和本地化
系統為界面上的固定文字提供了多種語言的文本內容,用戶可以選擇符合自己習慣的語言界面。界面上除了文本文字不同以外,其他布局以及功能不變。界面上為用戶提供了一個表示系統當前可用語言列表的下拉框供用戶選擇,用戶訪問系統時,通過選擇可用語言列表選擇當前想要使用的語言,選定的語言信息會被保存到Cookie中,后續的每次請求都先從Cookie中讀取默認語言的配置信息,使用該語言作為系統當前使用的顯示語言,在界面上使用該語言使用的文字作為顯示文本。如果未能讀取到當前配置的語言信息則獲取瀏覽器的首選語言配置列表,依次嘗試使用瀏覽器默認語言作為當前使用的語言信息,將該信息寫入Cookie用于后續請求的默認語言。
ASP.NET通過CultureInfo類并關聯相應資源文件的方式提供系統的本地化支持,在資源目錄下建立用于存放界面展示文字的以“資源文件名.語言-國家.resx”為文件名的資源文件,將用戶進程的CurrentCulture和CurrentUICulture設置為想要顯示的通過“語言-國家”為編碼創建的CultureInfo對象即可。其中“語言”為ISO639定義的語言代碼,“國家”為ISO3166定義的國家代碼,例如“zh-CN”為中文簡體,“en-US”為美式英語。缺省情況下,系統使用不指定語言的“資源文件名.resx”文件作為默認的語言顯示。
2.2.5 進程同步
基于瀏覽器-服務器模式的應用系統在多用戶訪問時會同時創建多個獨立進程,這些并發的進程在執行資源搶占的時候可能會產生一些意外的結果。當用戶進行選課操作時,系統先讀取課程的已選人數,判斷人數是否已滿,如果人數未滿則可以選課,將課程的已選人數加1,但是如果當另外一個進程在人數加1之前也進入了選課流程且執行了人數獲取和人數判斷,那么該進程也會認為課程人數未滿依然會正常執行選課操作,從而導致實際選課人數超出了課程的最大人數限制。
要避免類似的異常問題,要將進程的異步執行方式強制改為同步執行方式,即一個進程在執行資源請求的任務時,其他申請資源的進程要進入等待狀態,等活動進程操作結束后再依次進入執行。當大量請求同時抵達時,排隊的進程將成為系統的性能瓶頸,可能會導致部分請求無法及時處理造成HTTP超時,要避免此問題,可以將資源請求先放入消息隊列從而使用戶進程可直接返回不影響后續的處理過程。消息隊列的處理進程則按順序處理消費隊列中的請求,再依次將處理結果推送給相應的用戶進程,用于即可看到請求的處理結果。
本系統中參與選課的學生數量較少,不存在系統性能問題,因此,直接使用ASP.NET框架提供的資源鎖方案,即使用lock關鍵字實現進程和線程同步,先為系統聲明一個公共的靜態資源標識,比如 static readonly object _obj,每次須要同步的進程應先判斷標識是否被鎖定,若已被鎖定則表示有其他進程正在執行,當標識未被鎖定或鎖定被釋放時,進程嘗試鎖定該標識,若鎖定失敗則再次嘗試直至鎖定成功或超過最大嘗試次數。鎖定成功后便可執行正常的資源申請邏輯,完成后再解除資源標識鎖定狀態。
2.2.6 用戶鑒權
Web應用程序通常使用基于會話的Forms方式進行身份驗證,即通過表單輸入用戶名和密碼在服務端進行身份識別和驗證,驗證成功后將身份信息保存在會話中,客戶端保存會話ID,每次請求通過會話ID獲取會話中保存的用戶信息,實現用戶身份驗證。
系統采用基于角色的訪問控制模型實現系統權限控制[7],指定的角色將具有指定資源的訪問權限,再將用戶與角色綁定,以實現用戶對資源的訪問控制。
通過對MembershipProvider、RoleProvider和ProfileProvider 3個抽象類的實現,研發人員只要編寫少量的代碼就可以實現一套基于角色的訪問控制系統。ASP.NET還提供了現成的用戶身份相關控件,供研發人員直接使用。
3 結語
ASP.NET提供了跨平臺、多語言、面向對象的技術體系支持,借助NuGet工具庫的支持,極大地減少了研發人員在細節編碼上的工作量,可以將更多的精力放在產品設計和系統設計上,同時Windows技術體系還提供了豐富的系統運行維護工具,極大地降低了系統的實施成本和運維成本,研發人員可以通過Visual Studio快速完成信息系統的建設工作。借助ASP.NET框架的技術特點,系統從立項到上線試運行僅用了3個月。
教學信息管理系統的快速上線運行,不僅減少了教務人員的工作量,同時提高了留學生選課的效率,而且能夠更好地進行數據存檔備份,為未來的數據分析和教學計劃制定奠定基礎,從而進一步驗證了ASP.NET技術體系在信息系統建設中具有較高的實際應用價值。
參考文獻
[1]冉啟武,皇金鋒,董鋒斌,等.基于MVC模式的教學管理電子信息系統設計[J].現代電子技術,2020(4):54-57.
[2]郝冠軍.ASP.NET本質論[M].北京:機械工業出版社,2011.
[3]馬偉.ASP.NET 4權威指南[M].北京:機械工業出版社,2010.
[4]任廣震,侯進,王獻.MVC模式在B/S結構政務系統的應用研究[J].計算機應用與軟件,2014(8):54-58,74.
[5]謝姍姍,周國祥,石雷.多用戶大數據量的數據庫訪問優化與設計[J].合肥工業大學學報(自然科學版),2014(11):1311-1316.
[6]屠要峰,劉輝,張國良,等.一種分布式緩存系統的關鍵技術及應用[J].計算機科學,2018(5):156-162.
[7]徐沛娟,鄭晶,徐茂敬.基于角色的多級安全數據庫模型[J].計算機工程,2015(1):135-138,157.
(編輯 王雪芬編輯)
Application of ASP.NET framework in teaching information management system
LI Qiong, ZHAO Jing
(Tianjin Polytechnic College, Tianjin 300400, China)
Abstract: "Every year, a large number of foreign students come to China for further studies. To further improve the efficiency of academic management and enhance the teaching level of teachers, the college plans to develop a teaching assistance management system to achieve information-based management of Chinese language courses for international students. This article discusses the specific application of ASP.NET framework in teaching information management system.
Key words: teaching information management system; ASP.NET framework; universal time coordinated; synchronization process