Response と Request を処理するコードを少し書きます。どちらも 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 ドキュメントが含まれています。このドキュメントがリクエストとしてマップされることはわかっているので、オーバーライドされた仮想メソッドを呼び出します (見苦しいと思います)。マッピングコードをベースに保持する理由は、コードを複製しないためですが、次のようにして回避したいことを正確に行っていることがわかりました。
GetEligibility : ベースクラス
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)