張鵬,張聯(lián)
(渤海大學(xué) 外國(guó)語學(xué)院,遼寧 錦州 121013)
隨著經(jīng)濟(jì)快速發(fā)展,人民群眾物質(zhì)文化水平不斷提高,電能的應(yīng)用遠(yuǎn)遠(yuǎn)超過了人們的傳統(tǒng)認(rèn)識(shí)范圍,成為科學(xué)技術(shù)發(fā)展和國(guó)民經(jīng)濟(jì)飛躍的主要?jiǎng)恿?,持續(xù)地改變著人們的生活[1]。電源是向設(shè)備提供電能的裝置,也稱電源供應(yīng)器。隨著電力行業(yè)的發(fā)展,電源的種類越來越多,從國(guó)外引進(jìn)的先進(jìn)技術(shù)也越來越多,因此涉及的英文專業(yè)詞匯也越來越多,這些詞匯的學(xué)習(xí)、記憶和使用成為工程技術(shù)人員的難題。建立專業(yè)詞匯系統(tǒng),用對(duì)電源的分類方式對(duì)詞匯進(jìn)行分類,便于電源工程技術(shù)人員有選擇地按自己的專業(yè)方向進(jìn)行學(xué)習(xí)。
持久化(Persistence)是把數(shù)據(jù)保存到可掉電式存儲(chǔ)設(shè)備中供以后使用。持久層是在系統(tǒng)邏輯層面上用于實(shí)現(xiàn)數(shù)據(jù)持久化的一個(gè)相對(duì)獨(dú)立的領(lǐng)域,是對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行存儲(chǔ)、檢索、更新和刪除的一組類和組件[2]。持久層設(shè)計(jì)是軟件開發(fā)的基礎(chǔ)性工作,本文基于.NET平臺(tái)的NHibernate技術(shù)對(duì)電源專業(yè)詞匯系統(tǒng)進(jìn)行持久層設(shè)計(jì),為系統(tǒng)開發(fā)提供技術(shù)支持。
電源按大類可分為普通電源和特種電源[3-5],普通電源又可分為開關(guān)電源、逆變電源、交流穩(wěn)壓電源、變壓器電源等小類;特種電源又可分為高壓電源、醫(yī)療電源、軍用電源、航空航天電源、激光電源等小類。根據(jù)電源分類,將電源專業(yè)詞匯系統(tǒng)的數(shù)據(jù)存儲(chǔ)設(shè)計(jì)為“電源大類表(PowerBigCateg)”、“電源小類表 (Power Small Categ)”和 “電源專業(yè)詞匯表(Prof Vocabulary)”三個(gè)表。表之間存在兩個(gè)“一對(duì)多”聯(lián)系,即“電源大類表”和“電源小類表”實(shí)體之間是一對(duì)多聯(lián)系,一個(gè)電源大類包括多個(gè)電源小類,一個(gè)電源小類只能屬于一個(gè)電源大類;“電源小類表”和“電源專業(yè)詞匯表”之間是一對(duì)多聯(lián)系,一個(gè)電源小類包括多個(gè)電源專業(yè)詞匯,一個(gè)電源專業(yè)詞匯只能屬于一個(gè)電源小類?!半娫创箢惐怼敝麈I為“大類代碼”字段?!半娫葱☆惐怼敝麈I為“小類代碼”字段,“大類代碼”字段為與 “電源大類表”一對(duì)多聯(lián)系相對(duì)應(yīng)的外鍵(FK_BigCateg_SmallCateg)。 “電源專業(yè)詞匯表”主鍵為“詞匯代碼”字段,“小類代碼”字段為與“電源小類表”一對(duì)多聯(lián)系相對(duì)應(yīng)的外鍵(FK_SmallCateg_ProfVocabulary)。根據(jù)以上的分析,基于Microsoft SQL Server 2005數(shù)據(jù)庫(kù)管理系統(tǒng)設(shè)計(jì)的系統(tǒng)數(shù)據(jù)結(jié)構(gòu)及關(guān)系圖如圖1所示。
圖1 系統(tǒng)數(shù)據(jù)結(jié)構(gòu)及關(guān)系圖Fig.1 Data structure and relationship diagram of system
對(duì)象關(guān)系映射(O/RM,Object-Relation Mapping)是把在數(shù)據(jù)庫(kù)中直接進(jìn)行的原始操作,演變?yōu)閷?duì)類的屬性和方法的操作,是為了解決面向?qū)ο蟪绦蛟O(shè)計(jì)與關(guān)系數(shù)據(jù)庫(kù)之間存在不匹配的矛盾而產(chǎn)生的技術(shù),程序員可以采用非常簡(jiǎn)單的方式將程序中的對(duì)象自動(dòng)持久化到關(guān)系數(shù)據(jù)庫(kù)中。NHibernate是.NET領(lǐng)域流行的O/RM框架,NHibernate起源于Hibernate。Hibernate是基于JAVA平臺(tái)的對(duì)象關(guān)系映射框架,由于Hibernate取得的巨大成功,Microsoft運(yùn)用其基本思想開發(fā)了NHibernat,是基于.NET平臺(tái)的對(duì)象關(guān)系映射框架[6]。NHibernat框架體系結(jié)構(gòu)如圖2所示。
圖2 NHibernate框架體系結(jié)構(gòu)Fig.2 NHibernate framework architecture
從圖2中可以看出,NHibernate處于Database和Application之間,為應(yīng)用程序提供持久化對(duì)象到數(shù)據(jù)庫(kù)的服務(wù)。NHibernate通過分離Database和Application,使應(yīng)用程序的可移植性得以實(shí)現(xiàn)。對(duì)圖2中的主要組成元素描述如下:持久化操作(Persistence operations)使用3種查詢機(jī)制,分別是 HQL Query、QBC Query和 Native SQL Query; 配置文件(Configuration file)主要是用來配置一些全局性參數(shù);映射文件(Mapping file)以class為核心元素,規(guī)定類與庫(kù)表的映射,子元素用于規(guī)定類屬性與庫(kù)表字段之間的映射;會(huì)話(Session)和會(huì)話工廠(Session factory)則是面向?qū)ο竽P团c關(guān)系模型之間運(yùn)行時(shí)的連接紐帶;事務(wù)處理(Transaction processing)實(shí)現(xiàn)對(duì)底層 ADO.NET、ODBC、OLEDB 的相關(guān) API進(jìn)行了封裝。
持久化類(Persistent class)是指其實(shí)例需要被 Hibernate持久化到數(shù)據(jù)庫(kù)中的類。Hibernate板需要為數(shù)據(jù)庫(kù)中的每一個(gè)表編寫一個(gè)持久化類,為每個(gè)持久化屬性聲明訪問器(getters和 setters)由于屬性不一定需要聲明為public,可以對(duì) default、procted、internal、private 的屬性一樣進(jìn)行持久化。必須提供一個(gè)不帶參數(shù)的默認(rèn)構(gòu)造方法,訪問級(jí)別是public或protected類型。持久化類中所有的屬性,必須聲明為非密封的,也就是不能帶有sealed。持久類不需要繼承NHibernate的類或?qū)崿F(xiàn)NHibernate接口,提高了持久化類的獨(dú)立性[7-8]。由于持久化類具有規(guī)范性和規(guī)律性,因此可以使用代碼生成工具根據(jù)表結(jié)構(gòu)自動(dòng)生成,無需開發(fā)人員手工編寫類代碼。由于持久化類的代碼較多,受文章篇幅所限,本文只給出“電源小類表(PowerSmallCateg)”的持久化類設(shè)計(jì),代碼如下:
using System;
namespace NHibernate.Demo.PowerVocabulary
{
public class PowerSmallCateg
{
//對(duì)象屬性
private Int16 DigitalCode;
private String PinyinCode;
private String SmallCategName;
private String SmallCategCode;
private String BigCategCode;
//屬性函數(shù)
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每個(gè)持久化類都有與之相對(duì)應(yīng)的映射文件,通過映射文件,將數(shù)據(jù)表中的記錄轉(zhuǎn)化為對(duì)象,將記錄中的字段轉(zhuǎn)化為對(duì)象的屬性。映射文件除描述了NHibernate運(yùn)行時(shí)需要的元素類型和屬性外,還包含額外的元素屬性,如被映射字段是否允許為空等。所有映射文件均使用nhibernatemapping-2.0 schema。通常的NHibernate映射文件和類名相同,擴(kuò)展名為“hbm.xml”。映射文件由實(shí)體映射和關(guān)聯(lián)映射兩部分構(gòu)成。
1)實(shí)體映射,建立關(guān)系型數(shù)據(jù)庫(kù)中的表和程序中的業(yè)務(wù)類之間的對(duì)應(yīng)關(guān)系,包括“表名——類名”映射、“主鍵”映射和“字段——屬性”映射。“表名——類名”映射使用 2)關(guān)聯(lián)映射,對(duì)表之間的關(guān)聯(lián)關(guān)系進(jìn)行映射,包括“一對(duì)一”模式、“一對(duì)多”模式、“多對(duì)一”模式和“多對(duì)多”模式。其中,“一對(duì)一”模式使用 中都通過 “電源小類表(PowerSmallCateg)”表的映射文件設(shè)計(jì)如下: API(Application Programming Interface,應(yīng)用程序編程接口)是操作系統(tǒng)提供的預(yù)先定義好的一組函數(shù),包含在Windows系統(tǒng)目錄下的動(dòng)態(tài)連接庫(kù)文件中。.NET平臺(tái)應(yīng)用NHibernate的API來訪問數(shù)據(jù)庫(kù),使得開發(fā)人員無需訪問源碼,無需要理解內(nèi)部工作機(jī)制的細(xì)節(jié),就能完成對(duì)數(shù)據(jù)庫(kù)的Query、Insert、Update、Delete 等操作[9]。 NHibernate API訪問數(shù)據(jù)庫(kù)操作設(shè)計(jì)的一般流程如圖3所示。 圖3 NHibernate訪問數(shù)據(jù)庫(kù)操作Fig.3 NHibernate access to the database operation NHibernate API訪問數(shù)據(jù)庫(kù)操作設(shè)計(jì)分四步:一是,通過“new Configuration()”創(chuàng)建一個(gè) Configuration 對(duì)象,解析所有.NET對(duì)象與數(shù)據(jù)庫(kù)的映射關(guān)系;二是,通過“config.BuildSessionFactory ()” 創(chuàng)建 SessionFactory, 通過“factory.OpenSession()”方法來獲取 Session實(shí)例;三是,通過調(diào)用Session 接口操作數(shù)據(jù)庫(kù)的“Save()、Update()、Delete()、Load()、Find()”等方法實(shí)現(xiàn)對(duì)象與關(guān)系數(shù)據(jù)庫(kù)之間的交互;四是,無論事務(wù)執(zhí)行成功或失敗,都調(diào)用close()方法釋放Session實(shí)例占用的資源。 提出獨(dú)立的“持久層”的概念,是因?yàn)榉庋b了數(shù)據(jù)訪問的細(xì)節(jié),與系統(tǒng)其他部分具有較為清晰和嚴(yán)格的邏輯邊界。NHibernate對(duì)數(shù)據(jù)庫(kù)結(jié)構(gòu)提供了較為完整的封裝,將數(shù)據(jù)庫(kù)模式映射為較完全的對(duì)象模型,支持封裝和繼續(xù)機(jī)制,功能較強(qiáng)大,比一般的ORM靈活性高。本文基于NHibernate框架設(shè)計(jì)電源專業(yè)詞匯系統(tǒng)的持久層,開發(fā)人員可以完全按照對(duì)象模型操縱數(shù)據(jù)庫(kù),為快速軟件開發(fā)奠定了基礎(chǔ)。本軟件的開發(fā)與應(yīng)用,對(duì)電源專業(yè)工程技術(shù)人員掌握學(xué)習(xí)英文專業(yè)技術(shù)詞匯并提高專業(yè)技術(shù)水平具有重要作用。 [1]百度文庫(kù).電能對(duì)生產(chǎn)生活的影響 [EB/OL].http://wenku.baidu.com/link?url=q6HK6nozl8MUTrrvMGF7zg1dP4uGX-4DY3j4Aw9Gesk-8xuywsAkUnq8WrokaYwrpLDhJ7TBwcLb zxA5E11oqXHvCAM2RJog-exwGkV10kC,2014-9-11. [2]鄧廣勝.基于NHibernate的SaaS管理平臺(tái)研究與應(yīng)用[D].安徽:合肥工業(yè)大學(xué),2013. [3]史平君.特殊而應(yīng)用廣泛的電源—特種電源[J].電源技術(shù)應(yīng)用,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]王明倩,劉立強(qiáng),王宏宇.ORM技術(shù)——Nhibernate在考務(wù)管理系統(tǒng)中的應(yīng)用研究[J].長(zhǎng)春工業(yè)大學(xué)學(xué)報(bào):自然科學(xué)版,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]王培培,張?jiān)迫A.基于ASP.NET的醫(yī)療設(shè)備管理系統(tǒng)設(shè)計(jì)[J].電腦編程技巧與維護(hù),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架構(gòu)的Web開發(fā)應(yīng)用[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]蘇芬平,劉更,王海偉.數(shù)據(jù)庫(kù)管理系統(tǒng)持久層的Hibernate解決方案[J].計(jì)算機(jī)工程與設(shè)計(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 訪問數(shù)據(jù)庫(kù)設(shè)計(jì)
6 結(jié)束語