明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

實(shí)戰(zhàn) .Net 數(shù)據(jù)訪問層 - 15

[摘要]上面的示意圖中,步驟7指向的Remoting Server就是Host程序,而Remoting Server包裹著的RemoteCustomer就是真正提供服務(wù)的數(shù)據(jù)操作類。以下所列代碼即為該類的部...
上面的示意圖中,步驟7指向的Remoting Server就是Host程序,

而Remoting Server包裹著的RemoteCustomer就是真正提供服務(wù)的數(shù)

據(jù)操作類。

以下所列代碼即為該類的部分實(shí)現(xiàn):



代碼13:使用Data Access Logic進(jìn)行Remoting調(diào)用 – 3,RemoteCustomer



public class RemoteCustomer: MarshalByRefObject

{

public RemoteCustomer() { }



public ArrayList GetAllCustomers()

{

SqlConnection conn = new SqlConnection(

Helper.GetApplicationSetting("ConnectionString"));



// 通過ObjectSpaces獲取所有Customer數(shù)據(jù)

ObjectSpace os = new ObjectSpace(

Helper.GetApplicationSetting("MappingFile"), conn);



ObjectSet ost = os.GetObjectSet(typeof(MyCustomer), "");



// 以ArrayList方式返回所有Customer數(shù)據(jù)

// 注:當(dāng)前版本中,ObjectSet對象通過Remoting進(jìn)行傳遞有 Bug

ArrayList al = new ArrayList(ost);



return al;

}

}































































作者相信,在看完代碼后,肯定有些朋友會(huì)產(chǎn)生這樣的疑問:

代碼13中的RemoteCustomer完成的也是我們前面分析過的

Data Access Logic所能完成的工作,雖然當(dāng)中隔了一層Remoting,

但本質(zhì)相同,難道就不能與代碼11,12中的CustomerDal_ORM進(jìn)行

一次“有效重組”嗎?

回答是肯定的!



不過,我們還是需要做兩個(gè)非常簡單的操作:

(1) 大家還記得代碼9中的DalBase嗎?只要我們令它從MarshalByRefObject繼承(原先是默認(rèn)的object),即可“輕松”解決這個(gè)問題!但也別高興太早,一旦如此,所有其它的Data Access Logic類也將不得不接受這“多余的饋贈(zèng)”L,要知道,畢竟通過Remoting進(jìn)行Data Access Logic操作的機(jī)會(huì)還不是很多(一般通過Business Logic即可解決問題),這樣的“饋贈(zèng)”并不是人人可以消受的(這也是作者并沒在DAF Solution中這么實(shí)現(xiàn)的原因)!

(2)將上述RemoteCustomer的代碼并入CustomerDal_ORM中,但是,請注意:別忘了將方法名稱改掉(因?yàn)橐呀?jīng)有一個(gè)GetAllCustomers方法存在,雖然返回類型不同,但任何.NET下的Compiler都是無法區(qū)分這種差別的J)!



下一段:http://www.csdn.net/develop/Read_Article.asp?id=27559