2

複数のメソッドを使用してサービススタックにサービスを実装する方法を説明するドキュメント(クリアまたはその他)が見つかりません。すべての例は、1つのメソッドのみを持つサービスクラスを示しています。4つ以上のメソッドを持つサービスがある場合、実際には4つ以上のサービスクラス、4つ以上のリクエストDTO、4つ以上のレスポンスDTOを作成する必要があるとは想像できません。(ここに示すように

例:

4つの検索メソッド(method(Identifer1)、method2(identifer2)、method3(identifer3))を備えたサービス

リクエストDTO(サービススタックWiki、および最初のWebサービスの作成)のドキュメント化された構造に基づいて、リクエストDTOのクラス属性、サービスクラスへのルーティングを制御します(正しく理解している場合でも、ドキュメントを探していますまたは例)

ほとんどの例は、「最初のWebサービスの説明」で概説されているように、要求/応答DToに対して定義された命名規則に従っていないため、ルーティングに関するドキュメントは少しあいまいです。

私もこのSO投稿を読みましたが、アドバイスに従った後も同じ質問が残ります。

4

1 に答える 1

5

4つ以上のメソッドを持つサービスがある場合、実際には4つ以上のサービスクラス、4つ以上のリクエストDTO、4つ以上のレスポンスDTOを作成する必要があるとは想像できません。

4つのメソッドを持つ1つのサービスクラスは必要ありません。各メソッドはもちろんリクエストDtoを受け取り、レスポンスDtoを返します。明らかに、一部のメソッドでは、応答Dtoは必要ない場合があります

たとえば、5つのメソッドを使用する一般的なサービスは次のようになります。

public class ProductsService: Service
{
    [Route("/products")]
    public class GetProductsRequest: IReturn<List<ProductResponse>> {}

    public class ProductResponse
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

    public object Get(GetProductsRequest request)
    {
        IEnumerable<ProductResponse> response = ...
        return response;
    }

    [Route("/products/{id}")]
    public class GetProductRequest: IReturn<ProductResponse> 
    {
        public int Id { get; set; }
    }

    public object Get(GetProductRequest request)
    {
        ProductResponse response = ...
        return response;
    }

    [Route("/products")]
    public class CreateProductRequest 
    {
        public string Name { get; set; }
    }

    public object Put(CreateProductRequest request)
    {
        ... create the product here
        return new HttpResult { StatusCode = HttpStatusCode.Created };
    }

    [Route("/products/{id}")]
    public class UpdateProductRequest
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

    public object Patch(UpdateProductRequest request)
    {
        ... update the product here
        return new HttpResult { StatusCode = HttpStatusCode.Accepted };
    }

    [Route("/products/{id}")]
    public class DeleteProductRequest
    {
        public int Id { get; set; }
    }

    public object Delete(DeleteProductRequest request)
    {
        ... delete the product here
        return new HttpResult { StatusCode = HttpStatusCode.Accepted };
    }
}

リクエストとレスポンスのDTOをネストされたクラスとしてサービスに配置しましたが、別々のファイルに入れると読みやすくなります。

public class ProductsService: Service
{
    public object Get(GetProductsRequest request)
    {
        IEnumerable<ProductResponse> response = ...
        return response;
    }

    public object Get(GetProductRequest request)
    {
        ProductResponse response = ...
        return response;
    }

    public object Put(CreateProductRequest request)
    {
        ... create the product here
        return new HttpResult { StatusCode = HttpStatusCode.Created };
    }

    public object Patch(UpdateProductRequest request)
    {
        ... update the product here
        return new HttpResult { StatusCode = HttpStatusCode.Accepted };
    }

    public object Delete(DeleteProductRequest request)
    {
        ... delete the product here
        return new HttpResult { StatusCode = HttpStatusCode.Accepted };
    }
}
于 2012-12-29T23:17:25.833 に答える