私は、XML 要求/応答を使用する API へのインターフェースを実装するように割り当てられました。API プロバイダーは、XML 呼び出し用の xsd を提供しません。
xsd.exe を使用して C# クラスを生成しました。
すべてのリクエスト/レスポンスに対応するクラスを手動で作成する必要がありますか? これは、後でコードを簡単に維持するのに役立つ場合があります。または、.Net によって提供される Xml クラスを使用し、メソッドを記述して XML 要求/応答を作成する必要がありますか? 時間はかかりませんが、メンテナンス フェーズでは難しくなる可能性があります。
以下は、対応する XML 要素用に作成したサンプル クラスです。
XML 要素
<Product ID="41172" Description="2 Pers. With Breakfast" NonRefundable="YES" StartDate="2010-01-01" EndDate="2010-06-30" Rate="250.00" Minstay="1" />
対応クラス
internal class ProductElement : IElement
{
private const string ElementName = "Product";
private const string IdAttribute = "ID";
private const string DescriptionAttribute = "Description";
private const string NonRefundableAttribute = "NonRefundable";
private const string StartDateAttribute = "StartDate";
private const string EndDateAttribute = "EndDate";
private const string RateAttribute = "Rate";
private const string MinStayAttribute = "Minstay";
private string Id { get; private set; }
internal string Description { get; private set; }
internal bool IsNonRefundable { get; private set; }
private DateRange _dateRange;
private string ParseFormat = "yyyy-MM-dd";
private decimal? _rate;
private int? _minStay;
internal ProductElement(string id, DateRange dateRange, decimal? rate, int? minStay)
{
this.Id = id;
this._dateRange = dateRange;
this._rate = rate;
this._minStay = minStay;
}
internal ProductElement(XElement element)
{
this.Id = element.Attribute(IdAttribute).Value;
this.Description = element.Attribute(DescriptionAttribute).Value;
this.IsNonRefundable = element.Attribute(NonRefundableAttribute).Value.IsEqual("yes") ? true : false;
}
public XElement ToXElement()
{
var element = new XElement(ElementName);
element.SetAttributeValue(IdAttribute, _id);
element.SetAttributeValue(StartDateAttribute, _dateRange.Start.ToString(ParseFormat, CultureInfo.InvariantCulture));
element.SetAttributeValue(EndDateAttribute, _dateRange.End.ToString(ParseFormat, CultureInfo.InvariantCulture));
element.SetAttributeValue(RateAttribute, decimal.Round(_rate.Value, 2).ToString());
element.SetAttributeValue(MinStayAttribute, _minStay.Value.ToString());
return element;
}
}
時々、私はあまりにも多くの痛みを感じていると思います. 時々、その痛みは取る価値があると思います。みなさん、どう思いますか?また、クラスの設計に改善はありますか?