最近做的项目中要将PMS系统接口提供给两个不同的系统。一个是VB6 ,VB.Net开发的。
由于VB6只能传送string(那位同僚坚决只传送字符串,自己拼XML--在此俺就不说了)
另一情况就是PMS中不同的Category对外只开放一个简单类型的对象。普通会员,公司会员,中介对外就是一个MemberInfo对象。
我要根据String生成不同的Ctgy对象。例如传一个字符串"CC02"--生成普通会员对象给PMS。
CustomerCategory 是一个抽象类。下面的都是他的派生类。所以方法就针对抽象类编程。
那么俺就做了个适配器,返回CustomerCategory:
Code
写一个CategoryMethod包含所有的对象生成方法
public CustomerCategory WebPmsBookingCard(MemberManInfo info)
{
CstCtgyBookingCard ctgy = new CstCtgyBookingCard();
MemberManInfo crsmaninfo = new MemberManInfo();
if (info != null)
{
ctgy.CardNo = info.CardNo;
ctgy.Id = info.Id;
ctgy.LevelId = info.LevelId;
ctgy.Info = GetSheetGuest(info);
}
return ctgy;
}
public CustomerCategory WebPmsAgency(MemberManInfo info)
{
CstCtgyAgency ctgy = new CstCtgyAgency();
MemberManInfo crsmaninfo = new MemberManInfo();
if (info!= null)
{
ctgy.AgencyId = crsmaninfo.Id;
ctgy.Name = crsmaninfo.MemberName;
}
return ctgy;
}
{
CstCtgyBookingCard ctgy = new CstCtgyBookingCard();
MemberManInfo crsmaninfo = new MemberManInfo();
if (info != null)
{
ctgy.CardNo = info.CardNo;
ctgy.Id = info.Id;
ctgy.LevelId = info.LevelId;
ctgy.Info = GetSheetGuest(info);
}
return ctgy;
}
public CustomerCategory WebPmsAgency(MemberManInfo info)
{
CstCtgyAgency ctgy = new CstCtgyAgency();
MemberManInfo crsmaninfo = new MemberManInfo();
if (info!= null)
{
ctgy.AgencyId = crsmaninfo.Id;
ctgy.Name = crsmaninfo.MemberName;
}
return ctgy;
}
在此就贴出其中的几个方法
在调用的时候通过下面的方法转换成不同的
//categoryInfo 转换
if (Entity.ManInfo != null && !string.IsNullOrEmpty(Entity.ManInfo.CatogroyType))
{
CgryAdapter.CRSCtgyDelegate mydelegate =
CgryAdapter.CrsDelegateMethor(Entity.ManInfo.CatogroyType);
if (mydelegate != null)
{
CustomerCategory PMSCategory = mydelegate(Entity.ManInfo);
sheet.CategoryInfo = PMSCategory;
}
else
{
sheet.CategoryInfo = new CstCtgyNonMember();
}
}
if (Entity.ManInfo != null && !string.IsNullOrEmpty(Entity.ManInfo.CatogroyType))
{
CgryAdapter.CRSCtgyDelegate mydelegate =
CgryAdapter.CrsDelegateMethor(Entity.ManInfo.CatogroyType);
if (mydelegate != null)
{
CustomerCategory PMSCategory = mydelegate(Entity.ManInfo);
sheet.CategoryInfo = PMSCategory;
}
else
{
sheet.CategoryInfo = new CstCtgyNonMember();
}
}
Entity.ManInfo.CatogroyType 就是其他两个系统传过来的 Catogroy 类型的字符串。
判断字典中是否有该Catogroy 类型的委托。有我就直接将MemberManInfo类型的对象直接转换为了PMS系统中的相应的对象。
以后我们要添加一个不同的Catogroy,在CategoryMethod中添加对应的方法,CgryAdapter中给字典添加对应的string类型的Catogroy类型,相应的委托。
提供的方法无需变更。