OR層程式碼群組織和映射介紹
即時通訊軟體
OR層也是老生常談了,有的朋友說我是重複造車輪,只是OR這部分寫的太早了,更主要是的與BLL層代碼的整合,非常方便,所以呢,雖然後來NH和IB出來了我沒有換,MS的Linq出來了,我依然沒有換,經過這幾年的應用,更堅定了自己的想法。
與原來架構的主要差異是把資料對應由編碼檔案改為設定檔,當初考慮是方便寫代碼,用了之後才發覺這樣太不靈活了,一直托到現在才改
從結構上來說,與原來的架構沒有太多的差異,主要是把配置由自訂屬性改到了設定檔。另外加入了可配置的資料校正,在Column屬性中加入了一個ReadOnly的屬性,對於關聯關係和關聯表的處理會更方便。
<Property PropertyName="Name" FieldName="name" Description="姓名">
<Column TableName="User" ColumnName="Name" DbType="AnsiString" Length="50" ReadOnly=”true”
/>
</Property>
其中,ReadOnly預設值為false,當改為true時,如果更新資料庫,此列則會跳過。載入的時候,可以根據實際需要配置成同步載入或是消極式載入。
另外在Property屬性內加入校正功能,支援大小/Regex/範圍/時間等驗證
對於設定檔,預設放在Config/Map/目錄下,規則為類的全名+.Config的檔案:EES.H.Data.User.Config
資料庫的定義連接字串,通過SourceKey進行設定。 <SourceKey>House</SourceKey>
資料庫的連接字串配置在Config/DataSourceConfig.Config 的檔案中:
<DataSourceConfig DataSourceType="MSSqlServer" DataSourceKey="House">
<ConnectionString>server=(local);database=House;Trusted_Connection=true;</ConnectionString>
</DataSourceConfig>
在載入的時候,設定檔會自動被載入,系統不需要顯式處理,這點與常見的NH和IB映射應該有一定的不同,並且系統會自動處理Session的開啟和關閉,以及處理多資料來源等,這些會以業務層代碼裡面再作介紹
實體類如下:
[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");
}
}
}
}
對於實體類,大同小異,都是從EESObject繼承而來
EESData標註此類為資料類,另外也是為了通過工具產生介面層的視圖。
Contract標註此類可遠程式列化,Member為屬性的可序列化,如果沒有此自訂屬性,則此屬性不會進行遠程傳輸序列化。
OnPropertyChanging和OnPropertyChanged在伺服器端的作用不大,主要是對於用戶端的雙向繫結。
從這幾個屬性,可以看的出來,資料對應類為標準的一般類,由於中間用到了AOP,所以如果要用到校正功能,則需要在屬性前加 virtual 。
對於級聯的處理處理方式,採用一級對一級負責的處理方式,就如在部隊裡的處理一樣。
對於一對多和一對一的處理採用 關係配置處理。
對於主從關係的處理,還需要手工添加Slave的自訂屬性,在介面產生的時候,工具會自動產生主從關係的介面。還要在屬性前增加 virtaul的屬性,則系統會自動處理其層次關係,如果在用戶端則會自動實現級聯觸發。
映射層的介紹結束了,寫的不到不明白的地方,請大家批評指正
關注技術文章飛秋:http://www.freeeim.com/,24小時專業轉載。