原子操作和规范约定
此次设计的思路是:在客户端只需要发少量的数据,即操作集合,每个操作的参数给总站服务器,总站服务器很快的解析服务器发来的请求,按照一定的规范去执行每一个操作,当每个操作都执行成功后再把其返回给客户端。
执行事务时传递的过程
此次设计中一共有5个数据表,总共有23个相关的数据操作,这23个数据操作有固定的参数和返回值。我们把这23个操作称为原子操作,每个事务都是基于这23个操作中的几个进行组合而成的。这样,我们把这23个操作编上号码,每一个号码对应一个操作,客户端在组装事务的时候只需要知道哪个编号的方法做什么工作,需要传的参数是什么,返回结果我怎么接收即可。
编程的时候我们需要把每个方法都在GlobalService里面重新写一下,这样客户就不用再去连接分服务器,只要知道编号,丢给GlobalService,它就会替你查找并执行,最后返回结果。
/// <summary>
/// 编号:2
/// 搜索某地的旅馆有多少空余房间
/// 表:Hotel
/// </summary>
/// <param name="locationString">地名</param>
/// <param name="hotelRemoteService">接口实现类</param>
/// <returns>返回结果</returns>
private int searchHotelAvail(String locationString, IHotelRemoteService hotelRemoteService)
{
return hotelRemoteService.searchHotelAvail(locationString);
}
编号为2的方法在GlobalService中重写
/// <summary>
/// 编号:8
/// 返回全部客户的信息
/// 表:Customer
/// </summary>
/// <param name="customerRemoteService">接口实现类</param>
/// <returns></returns>
private List<Customer> RetAllCustomer(ICustomerRemoteService customerRemoteService)
{
return customerRemoteService.RetAllCustomer();
}
编号为8的方法需要传递接口实现类,每个方法都需要传递接口实现类
/// <summary>
/// 编号:22
/// 验证用户
/// 表:Customer
/// </summary>
/// <param name="CustName">用户名</param>
/// <param name="customerRemoteService">接口实现类</param>
/// <returns></returns>
private Boolean Validate(String CustName, ICustomerRemoteService customerRemoteService)
{
return customerRemoteService.Validate(CustName);
}
编号为22的方法为验证客户的信息
有了这样一个统一的规范,客户只需要传递一些简单的参数就可以实现在服务器的操作。在执行每个操作的时候,我们需要把每个用户传来的参数写成符合远程分服务器可以执行的样子,这样,就需要有一个专门过程把用户的参数添加到程序里面。
/// <summary>
/// 根据方法的编号执行相应的方法,并返回所需要的数据
/// </summary>
/// <param name="idString">执行方法的编号</param>
/// <param name="objparam">参数列表</param>
/// <returns>所需要的结果</returns>
private object GetDataByID(String idString, object[] objparam)
{
switch (idString)
{
case "1":
return searchCarAvail(objparam[0].ToString(), (ICarRemoteService)objparam[1]);
case "3":
return insertCar(objparam[0].ToString(), (Int32)objparam[1], (Int32)objparam[2], (ICarRemoteService)objparam[3]);
case "2":
return searchHotelAvail(objparam[0].ToString(), (IHotelRemoteService)objparam[1]);
case "4":
return insertHotel(objparam[0].ToString(), (Int32)objparam[1], (Int32)objparam[2], (IHotelRemoteService)objparam[3]);
case "5":
return deleteCar(objparam[0].ToString(), (ICarRemoteService)objparam[1]);
case "6":
return RetAllCar((ICarRemoteService)objparam[0]);
通过统一的编号寻找函数,并且添加进去,等待回复