上面的示意圖中,步驟7指向的Remoting Server就是Host程序,
而Remoting Server包裹著的RemoteCustomer就是真正提供服務的數
據操作類。
以下所列代碼即為該類的部分實現:
代碼13:使用Data Access Logic進行Remoting調用 – 3,RemoteCustomer
public class RemoteCustomer: MarshalByRefObject
{
public RemoteCustomer() { }
public ArrayList GetAllCustomers()
{
SqlConnection conn = new SqlConnection(
Helper.GetApplicationSetting("ConnectionString"));
// 通過ObjectSpaces獲取所有Customer數據
ObjectSpace os = new ObjectSpace(
Helper.GetApplicationSetting("MappingFile"), conn);
ObjectSet ost = os.GetObjectSet(typeof(MyCustomer), "");
// 以ArrayList方式返回所有Customer數據
// 注:當前版本中,ObjectSet對象通過Remoting進行傳遞有 Bug
ArrayList al = new ArrayList(ost);
return al;
}
}
作者相信,在看完代碼后,肯定有些朋友會產生這樣的疑問:
代碼13中的RemoteCustomer完成的也是我們前面分析過的
Data Access Logic所能完成的工作,雖然當中隔了一層Remoting,
但本質相同,難道就不能與代碼11,12中的CustomerDal_ORM進行
一次“有效重組”嗎?
回答是肯定的!
不過,我們還是需要做兩個非常簡單的操作:
(1) 大家還記得代碼9中的DalBase嗎?只要我們令它從MarshalByRefObject繼承(原先是默認的object),即可“輕松”解決這個問題!但也別高興太早,一旦如此,所有其它的Data Access Logic類也將不得不接受這“多余的饋贈”L,要知道,畢竟通過Remoting進行Data Access Logic操作的機會還不是很多(一般通過Business Logic即可解決問題),這樣的“饋贈”并不是人人可以消受的(這也是作者并沒在DAF Solution中這么實現的原因)!
(2)將上述RemoteCustomer的代碼并入CustomerDal_ORM中,但是,請注意:別忘了將方法名稱改掉(因為已經有一個GetAllCustomers方法存在,雖然返回類型不同,但任何.NET下的Compiler都是無法區分這種差別的J)!
下一段:http://www.csdn.net/develop/Read_Article.asp?id=27559
|