實(shí)戰(zhàn) .Net 數(shù)據(jù)訪問層 - 15
發(fā)表時(shí)間:2023-07-22 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]上面的示意圖中,步驟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