2012-02-08 14 views
4

私はWCF Web API PreviewでREST APIを構築しました。このAPIに渡すクラスを持つライブラリを構築したいと思っています。多くの機能を持たない単純なPOCOクラスでなければなりません。REST APIのオブジェクトのデザインパターン?

しかし、受信側では、これらのクラスにいくつかの機能を追加することは意味があります。私は、以下の例があります。

[WebInvoke(UriTemplate = "", Method = "POST")] 
public Supertext.API.Order Create(Supertext.API.Order apiOrder) 
{ 

をそして、これは一例POCOクラスです:

public class Order 
{ 
    public string Service { get; set; } 

    public string OrderTitle { get; set; } 

    public string Currency { get; set; } 
} 

さて、サーバ側でこのクラスを拡張するための良い方法は何ですか?
サブクラスを使用するとうまくいかないと思います。 代議員ですか?
実際には2つの異なるバージョンのクラスがありますか? 1つはクライアント用で、もう1つはサーバー用です。

他の人はどうしますか?

+1

Web APIはわかりませんが、あなたの注文はちょっとしたDTOなので、シンプルでクリーンな、代わりにどこかであなたの機能を構築する?あるいは、検証などのことを考えていましたか? –

+0

さて、問題はそれを行うための最も一般的な方法は何ですか? – Remy

答えて

2

このPOCOクラスに特別な機能を追加する際の問題は、ドメインオブジェクトに変換することです。このドメインオブジェクトの性質は、本質的に、このクラスが操作へのインタフェースの定義として機能するという事実によって制約されます。このクラスに関する詳細を変更すると、クライアントが破損する可能性があります。

純粋にデータ転送オブジェクトとしてこのクラスを維持し、ワイヤフォーマットのオブジェクトへのブリッジを支援し、AutoMapperなどのマッパーを使用してデータをDTOから実際のドメインオブジェクト。実際のドメインオブジェクトは完全にあなたのコントロール下にあり、サービスコンシューマへのカスケード効果を脅かすことなく、喜んでそれをリファクタリングすることができます

+0

でも、それは基本的に同じ属性を持つ同じクラスを2回持つことを意味します。部分クラスはどうですか?それは悪い考えですか?私はそれを見ましたhttp://msdn.microsoft.com/en-us/library/cc716747.aspx – Remy

+0

よく最初にクラスは非常によく似ているかもしれませんが、データがワイヤとは内部的に異なって表現されるようになるとフォーマット。部分的なクラスは、複数の責任を持つ単一のクラスを残します。別々のクラスは懸念をはるかに明確に分離します。 –

+0

十分です。試してみましょう。 – Remy