【飞秋】OR层代码组织介绍
OR層代碼組織和映射介紹
即時(shí)通訊軟件
?
?
??? OR層也是老生常談了,有的朋友說我是重復(fù)造車輪,只是OR這部分寫的太早了,更主要是的與BLL層代碼的集成,非常方便,所以呢,雖然后來NH和IB出來了我沒有換,MS的Linq出來了,我依然沒有換,經(jīng)過這幾年的應(yīng)用,更堅(jiān)定了自己的想法。
??? 與原來框架的主要差異是把數(shù)據(jù)映射由編碼文件改為配置文件,當(dāng)初考慮是方便寫代碼,用了之后才發(fā)覺這樣太不靈活了,一直托到現(xiàn)在才改
??? 從結(jié)構(gòu)上來說,與原來的框架沒有太多的差異,主要是把配置由自定義屬性改到了配置文件。另外加入了可配置的數(shù)據(jù)校驗(yàn),在Column屬性中加入了一個(gè)ReadOnly的屬性,對(duì)于關(guān)聯(lián)關(guān)系和關(guān)聯(lián)表的處理會(huì)更方便。
<Property PropertyName="Name" FieldName="name" Description="姓名">
? <Column TableName="User" ColumnName="Name" DbType="AnsiString" Length="50" ReadOnly=”true” />
</Property>
???? 其中,ReadOnly默認(rèn)值為false,當(dāng)改為true時(shí),如果更新數(shù)據(jù)庫,此列則會(huì)跳過。加載的時(shí)候,可以根據(jù)實(shí)際需要配置成同步加載或是延遲加載。
???? 另外在Property屬性內(nèi)加入校驗(yàn)功能,支持大小/正則表達(dá)式/范圍/時(shí)間等驗(yàn)證
???? 對(duì)于配置文件,默認(rèn)放在Config/Map/目錄下,規(guī)則為類的全名+.Config的文件:EES.H.Data.User.Config
???? 數(shù)據(jù)庫的定義連接字符串,通過SourceKey進(jìn)行設(shè)置。? <SourceKey>House</SourceKey>
???? 數(shù)據(jù)庫的連接字符串配置在Config/DataSourceConfig.Config 的文件中:
<DataSourceConfig DataSourceType="MSSqlServer" DataSourceKey="House">
? <ConnectionString>server=(local);database=House;Trusted_Connection=true;</ConnectionString>
</DataSourceConfig>?????
???? 在加載的時(shí)候,配置文件會(huì)自動(dòng)被加載,系統(tǒng)不需要顯式處理,這點(diǎn)與常見的NH和IB映射應(yīng)該有一定的不同,并且系統(tǒng)會(huì)自動(dòng)處理Session的打開和關(guān)閉,以及處理多數(shù)據(jù)源等,這些會(huì)以業(yè)務(wù)層代碼里面再作介紹
?
??? 實(shí)體類如下:
??? [EESData()]
??? [Contract()]
??? public class User : EESObject
??? {
???????? protected String name;
/// <summary>
/// 姓名
/// </summary>
[Member(3)]
public virtual String Name
{
??? get
??? {
??????? return name;
??? }
??? set
??? {
??????? if ((name != value))
??????? {
??????????? this.OnPropertyChanging("Name");
??????????? name = value;
??????????? this.OnPropertyChanged("Name");
??????? }
??? }
}
?? }
?? 對(duì)于實(shí)體類,大同小異,都是從EESObject繼承而來
?? EESData標(biāo)注此類為數(shù)據(jù)類,另外也是為了通過工具生成界面層的視圖。
?? Contract標(biāo)注此類可遠(yuǎn)程序列化,Member為屬性的可序列化,如果沒有此自定義屬性,則此屬性不會(huì)進(jìn)行遠(yuǎn)程傳輸序列化。
?? OnPropertyChanging和OnPropertyChanged在服務(wù)器端的作用不大,主要是對(duì)于客戶端的雙向綁定。
?? 從這幾個(gè)屬性,可以看的出來,數(shù)據(jù)映射類為標(biāo)準(zhǔn)的一般類,由于中間用到了AOP,所以如果要用到校驗(yàn)功能,則需要在屬性前加 virtual 。
?
?? 對(duì)于級(jí)聯(lián)的處理處理方式,采用一級(jí)對(duì)一級(jí)負(fù)責(zé)的處理方式,就如在部隊(duì)里的處理一樣。
?? 對(duì)于一對(duì)多和一對(duì)一的處理采用 關(guān)系配置處理。
?? 對(duì)于主從關(guān)系的處理,還需要手工添加Slave的自定義屬性,在界面生成的時(shí)候,工具會(huì)自動(dòng)生成主從關(guān)系的界面。還要在屬性前增加 virtaul的屬性,則系統(tǒng)會(huì)自動(dòng)處理其層次關(guān)系,如果在客戶端則會(huì)自動(dòng)實(shí)現(xiàn)級(jí)聯(lián)觸發(fā)。
?
??? 映射層的介紹結(jié)束了,寫的不到不明白的地方,請(qǐng)大家批評(píng)指正
?
?
?
關(guān)注技術(shù)文章飛秋:http://www.freeeim.com/,24小時(shí)專業(yè)轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的【飞秋】OR层代码组织介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VTK修炼之道4_Win32控制台项目
- 下一篇: 09-03-06 FreeEIM 姗姗来