張鵬,張聯
(渤海大學 外國語學院,遼寧 錦州 121013)
隨著經濟快速發展,人民群眾物質文化水平不斷提高,電能的應用遠遠超過了人們的傳統認識范圍,成為科學技術發展和國民經濟飛躍的主要動力,持續地改變著人們的生活[1]。電源是向設備提供電能的裝置,也稱電源供應器。隨著電力行業的發展,電源的種類越來越多,從國外引進的先進技術也越來越多,因此涉及的英文專業詞匯也越來越多,這些詞匯的學習、記憶和使用成為工程技術人員的難題。建立專業詞匯系統,用對電源的分類方式對詞匯進行分類,便于電源工程技術人員有選擇地按自己的專業方向進行學習。
持久化(Persistence)是把數據保存到可掉電式存儲設備中供以后使用。持久層是在系統邏輯層面上用于實現數據持久化的一個相對獨立的領域,是對數據庫中的數據進行存儲、檢索、更新和刪除的一組類和組件[2]。持久層設計是軟件開發的基礎性工作,本文基于.NET平臺的NHibernate技術對電源專業詞匯系統進行持久層設計,為系統開發提供技術支持。
電源按大類可分為普通電源和特種電源[3-5],普通電源又可分為開關電源、逆變電源、交流穩壓電源、變壓器電源等小類;特種電源又可分為高壓電源、醫療電源、軍用電源、航空航天電源、激光電源等小類。根據電源分類,將電源專業詞匯系統的數據存儲設計為“電源大類表(PowerBigCateg)”、“電源小類表 (Power Small Categ)”和 “電源專業詞匯表(Prof Vocabulary)”三個表。表之間存在兩個“一對多”聯系,即“電源大類表”和“電源小類表”實體之間是一對多聯系,一個電源大類包括多個電源小類,一個電源小類只能屬于一個電源大類;“電源小類表”和“電源專業詞匯表”之間是一對多聯系,一個電源小類包括多個電源專業詞匯,一個電源專業詞匯只能屬于一個電源小類。“電源大類表”主鍵為“大類代碼”字段。“電源小類表”主鍵為“小類代碼”字段,“大類代碼”字段為與 “電源大類表”一對多聯系相對應的外鍵(FK_BigCateg_SmallCateg)。 “電源專業詞匯表”主鍵為“詞匯代碼”字段,“小類代碼”字段為與“電源小類表”一對多聯系相對應的外鍵(FK_SmallCateg_ProfVocabulary)。根據以上的分析,基于Microsoft SQL Server 2005數據庫管理系統設計的系統數據結構及關系圖如圖1所示。

圖1 系統數據結構及關系圖Fig.1 Data structure and relationship diagram of system
對象關系映射(O/RM,Object-Relation Mapping)是把在數據庫中直接進行的原始操作,演變為對類的屬性和方法的操作,是為了解決面向對象程序設計與關系數據庫之間存在不匹配的矛盾而產生的技術,程序員可以采用非常簡單的方式將程序中的對象自動持久化到關系數據庫中。NHibernate是.NET領域流行的O/RM框架,NHibernate起源于Hibernate。Hibernate是基于JAVA平臺的對象關系映射框架,由于Hibernate取得的巨大成功,Microsoft運用其基本思想開發了NHibernat,是基于.NET平臺的對象關系映射框架[6]。NHibernat框架體系結構如圖2所示。

圖2 NHibernate框架體系結構Fig.2 NHibernate framework architecture
從圖2中可以看出,NHibernate處于Database和Application之間,為應用程序提供持久化對象到數據庫的服務。NHibernate通過分離Database和Application,使應用程序的可移植性得以實現。對圖2中的主要組成元素描述如下:持久化操作(Persistence operations)使用3種查詢機制,分別是 HQL Query、QBC Query和 Native SQL Query; 配置文件(Configuration file)主要是用來配置一些全局性參數;映射文件(Mapping file)以class為核心元素,規定類與庫表的映射,子元素用于規定類屬性與庫表字段之間的映射;會話(Session)和會話工廠(Session factory)則是面向對象模型與關系模型之間運行時的連接紐帶;事務處理(Transaction processing)實現對底層 ADO.NET、ODBC、OLEDB 的相關 API進行了封裝。
持久化類(Persistent class)是指其實例需要被 Hibernate持久化到數據庫中的類。Hibernate板需要為數據庫中的每一個表編寫一個持久化類,為每個持久化屬性聲明訪問器(getters和 setters)由于屬性不一定需要聲明為public,可以對 default、procted、internal、private 的屬性一樣進行持久化。必須提供一個不帶參數的默認構造方法,訪問級別是public或protected類型。持久化類中所有的屬性,必須聲明為非密封的,也就是不能帶有sealed。持久類不需要繼承NHibernate的類或實現NHibernate接口,提高了持久化類的獨立性[7-8]。由于持久化類具有規范性和規律性,因此可以使用代碼生成工具根據表結構自動生成,無需開發人員手工編寫類代碼。由于持久化類的代碼較多,受文章篇幅所限,本文只給出“電源小類表(PowerSmallCateg)”的持久化類設計,代碼如下:
using System;
namespace NHibernate.Demo.PowerVocabulary
{
public class PowerSmallCateg
{
//對象屬性
private Int16 DigitalCode;
private String PinyinCode;
private String SmallCategName;
private String SmallCategCode;
private String BigCategCode;
//屬性函數
public Int16 DigitalCode
{get{return DigitalCode;}
set{DigitalCode=value;}
}
public String PinyinCode
{get{return PinyinCode;}
set{PinyinCode=value;}
}
public String SmallCategName
{get{return SmallCategName;}
set{SmallCategName=value;}
}
public String SmallCategCode
{get{return SmallCategCode;}
set{SmallCategCode=value;}
}
public String BigCategCode
{get{return BigCategCode;}
set{BigCategCode=value;}
}
}
}
NHibernate每個持久化類都有與之相對應的映射文件,通過映射文件,將數據表中的記錄轉化為對象,將記錄中的字段轉化為對象的屬性。映射文件除描述了NHibernate運行時需要的元素類型和屬性外,還包含額外的元素屬性,如被映射字段是否允許為空等。所有映射文件均使用nhibernatemapping-2.0 schema。通常的NHibernate映射文件和類名相同,擴展名為“hbm.xml”。映射文件由實體映射和關聯映射兩部分構成。
1)實體映射,建立關系型數據庫中的表和程序中的業務類之間的對應關系,包括“表名——類名”映射、“主鍵”映射和“字段——屬性”映射。“表名——類名”映射使用 2)關聯映射,對表之間的關聯關系進行映射,包括“一對一”模式、“一對多”模式、“多對一”模式和“多對多”模式。其中,“一對一”模式使用 中都通過 “電源小類表(PowerSmallCateg)”表的映射文件設計如下: API(Application Programming Interface,應用程序編程接口)是操作系統提供的預先定義好的一組函數,包含在Windows系統目錄下的動態連接庫文件中。.NET平臺應用NHibernate的API來訪問數據庫,使得開發人員無需訪問源碼,無需要理解內部工作機制的細節,就能完成對數據庫的Query、Insert、Update、Delete 等操作[9]。 NHibernate API訪問數據庫操作設計的一般流程如圖3所示。 圖3 NHibernate訪問數據庫操作Fig.3 NHibernate access to the database operation NHibernate API訪問數據庫操作設計分四步:一是,通過“new Configuration()”創建一個 Configuration 對象,解析所有.NET對象與數據庫的映射關系;二是,通過“config.BuildSessionFactory ()” 創建 SessionFactory, 通過“factory.OpenSession()”方法來獲取 Session實例;三是,通過調用Session 接口操作數據庫的“Save()、Update()、Delete()、Load()、Find()”等方法實現對象與關系數據庫之間的交互;四是,無論事務執行成功或失敗,都調用close()方法釋放Session實例占用的資源。 提出獨立的“持久層”的概念,是因為封裝了數據訪問的細節,與系統其他部分具有較為清晰和嚴格的邏輯邊界。NHibernate對數據庫結構提供了較為完整的封裝,將數據庫模式映射為較完全的對象模型,支持封裝和繼續機制,功能較強大,比一般的ORM靈活性高。本文基于NHibernate框架設計電源專業詞匯系統的持久層,開發人員可以完全按照對象模型操縱數據庫,為快速軟件開發奠定了基礎。本軟件的開發與應用,對電源專業工程技術人員掌握學習英文專業技術詞匯并提高專業技術水平具有重要作用。 [1]百度文庫.電能對生產生活的影響 [EB/OL].http://wenku.baidu.com/link?url=q6HK6nozl8MUTrrvMGF7zg1dP4uGX-4DY3j4Aw9Gesk-8xuywsAkUnq8WrokaYwrpLDhJ7TBwcLb zxA5E11oqXHvCAM2RJog-exwGkV10kC,2014-9-11. [2]鄧廣勝.基于NHibernate的SaaS管理平臺研究與應用[D].安徽:合肥工業大學,2013. [3]史平君.特殊而應用廣泛的電源—特種電源[J].電源技術應用,2010,13(6):1-7.SHI Ping-jun.Special power supply:a special and widely used power[J].Application of Power Technology,2010,13(6):1-7. [4]百度百科.電源[EB/OL].http://baike.baidu.com/view/13542.htm?fr=aladdin,2014-9-1. [5]Gregor Dolanc,Darko Belavi?,Marko Hrovat,et al.iature fuel reformer system for portable power sources[J].Journal of Power Sources,2014,271(20):392-400. [6]王明倩,劉立強,王宏宇.ORM技術——Nhibernate在考務管理系統中的應用研究[J].長春工業大學學報:自然科學版,2009,30(3):352-356.WANG Ming-qian,LIU Li-qian,WANG Hong-yu.Application of ORM Nhibernate in the exam administration system[J].JournalofChangchun University ofTechnology:Natural Science Edition,2009,30(3):352-356. [7]王培培,張云華.基于ASP.NET的醫療設備管理系統設計[J].電腦編程技巧與維護,2013,20(8):83-85.WANG Pei-pei,ZHANG Yun-hua.The design of a managerial system of medical equipment based on ASP.NET[J].Computer Programming Skills&Maintenance,2013,20(8):83-85. [8]呂浩志.基于DWZ、NHibernate和ASP.NET MVC3架構的Web開發應用[J].科技視界,2014,4(5):62-63.LU Hao-zhi.Web development application based on DWZ,NHibernate and ASP.NET MVC3 framework[J].Science&Technology Vision,2014,4(5):62-63. [9]蘇芬平,劉更,王海偉.數據庫管理系統持久層的Hibernate解決方案[J].計算機工程與設計,2008,29(12):2991-2997.SU Fen-ping,LIU Geng,WANG Hai-wei.Hibernate solution for DBMS persistence layer[J].Computer Engineering and Design,2008,29(12):2991-2993.5 訪問數據庫設計

6 結束語