ルートを登録する ServiceStack のベスト プラクティスを知りたいです。
- AppHost で Routes.Add を使用してルートを定義する
- DTO の RouteAttiribute デコレーターを使用してルートを定義する
ルート定義を DTO から分離するため、AppHost でそれを行うことが望ましい場所をいくつか読みました。しかし、私が目にするほとんどの例はデコレータ パターンを使用しています。
それで、どれが良いですか?どちらか一方を使用する引数はありますか?
ルートを登録する ServiceStack のベスト プラクティスを知りたいです。
ルート定義を DTO から分離するため、AppHost でそれを行うことが望ましい場所をいくつか読みました。しかし、私が目にするほとんどの例はデコレータ パターンを使用しています。
それで、どれが良いですか?どちらか一方を使用する引数はありますか?
ルート属性で DTO を装飾することがベスト プラクティスになりました。SerivceStack の「新しい API」のリリースは、これの多くの利点を示していますが、最も重要なことは、より「簡潔で型指定されたエンド ツー エンドのクライアント API」を促進することです。
IReturn
、IReturn<T>
またはインターフェースのいずれかで DTO をマークすることに加えて Route 属性を使用することでIReturnVoid
、現在 ServiceStack によって提供されているすべての機能を使用できます。
利点
特定の DTO に対して、ToUrl 拡張メソッドを使用して、属性を検出してルートを生成できます。
[Route("/route/{Id}/{Name}")]
public class ExampleDTO : IReturn
{
public int Id { get; set; }
public string Name { get; set; }
public string Value { get; set; }
}
var url = new ExampleDTO() { Id = 1, Name = "Test", Value = "Foo" }.ToUrl("GET");
// generates /route/1/Test?value=Foo
ServiceClients は、これらすべてを内部で行います。消費するコードは次のようになります。
ExampleDTO response = new JsonServiceClient(“http://api.com/)
.Get(new ExampleDTO() { Id = 1, Name = "Test", Value = "Foo" });
デカップリングについてはどうですか? 私は、ルートから DTO を分離する大きな必要性はないと主張します。ルートを変更せずにリクエストを変更してはならないことを、仲間の開発者に知ってもらいたいです。DTO を変更した後に AppHost のルートを更新するのを忘れたため、多くのランタイム エラーが発生しました。