编写一些处理响应和请求的代码。两者都可以是 XML 的形式,也可以是通过转换和序列化创建的 C# 对象的形式。(这是.NET 2.0)
Response 和 Request 是较大消息类型的基本实现。现在我有 GetEligibility 和 FindCandidates。
下面使用的 Model.MessageModel 类的示例:
public partial class GetEligibilityResponseMessage : ResponseMessage
public partial class ResponseMessage : Message
因为我不想复制我的映射功能,所以我决定使用泛型来简化流程,而且效果很好:
基类代码
public virtual Model.MessageModel.Message MapToModel<T>(XmlDocument xml)
{
V3Mapper mapper = new V3Mapper();
Model.MessageModel.Message message = mapper.MapToDomainModel<T>(xml, Environment) as Model.MessageModel.Message;
return message;
}
public virtual XmlDocument MapToXml<T>(Model.MessageModel.Message message)
{
V3Mapper mapper = new V3Mapper();
XmlDocument xml= mapper.MapToV3Message<T>(message, Environment);
return xml;
}
当我的代码第一次被调用时,它有一个 XML 文档。我知道这个文档将被映射为一个请求,所以我调用了一个被覆盖的虚拟方法(我认为它很难看)。将映射代码保留在基础中的原因是不重复代码,但我发现我正在做我想通过以下方式避免的确切事情:
获取资格:基类
public override Model.MessageModel.Message MapToModel<T>(XmlDocument xml)
{
if(typeof(T).IsAssignableFrom(typeof(GetEligibilityResponseMessage)))
{
return base.MapToModel<GetEligibilityResponseMessage>(xml);
}
else if (typeof(T).IsAssignableFrom(typeof(GetEligibilityRequestMessage)))
{
return base.MapToModel<GetEligibilityRequestMessage>(xml);
}
return null;//because this is a quick code snippet
}
有没有更优雅的方式来做到这一点?我总是知道我是在处理响应还是请求。我想让功能保持打开状态,这样它就不会太紧耦合,但同时又要功能强大且速度快。
这将通过许多不同的消息类型来实现,我真的很讨厌复制/粘贴风格的编码,所以一个优雅的解决方案会很棒,但我不确定是否有一个。(.NET 2.0)