---
title: "サービス層API"
slug: "service-layer-api"
abstract: ""
---
# サービス層API

すべてのサービス層APIには、ECSと通信するための抽象的および汎用的な手法がいくつか含まれています。情報は双方向に流れます。商品情報、価格、在庫情報はECSから読み取り、ユーザーインターフェースで訪問者に提示する必要があります。ショッピングカートの内容、顧客アカウント情報、出荷情報は注文を作成するためにECSに解析しなければなりません。

デフォルトのサービスレイヤーはカスタマイズまたは置き換えが可能です。

サービス層の各メソッドは単一のRequestオブジェクトを受け付け、単一のResultオブジェクトを返します。最大限の柔軟性のために、各メソッドごとにRequestオブジェクトとResultオブジェクトを個別にカスタマイズできます。サービスレイヤーインターフェースは、ドメインモデルオブジェクトが顧客であっても同じであり、入力されるパラメータや返される結果も変わりません。

メソッドのRequestやResultオブジェクトをカスタマイズしていれば、対応する拡張メソッドを使い、ジェネリックを受け入れます。

例えば:

ショッピングカートに行を追加するためのデフォルトのメソッド署名:

public virtual CartResult AddCartLines(NotNull AddCartLinesRequest request)

同じ方法の一般的なバージョン:

public static TAddCartLinesResult AddCartLines<TAddCartLinesResult>(NotNull this CartServiceProvider cartProvider, NotNull AddCartLinesRequest request)

## サービス方法

可能であれば、サービスプロバイダー上のすべてのメソッドに対して以下の命名規則を使用してください。

-   CreateEntityName(例:CreateCart)
-   GetEntityName(例:GetCart)
-   DeleteEntityName(例:DeleteCart)
-   UpdateEntityName(例:UpdateCart)

可能であれば、エンティティ上の関連項目を操作するすべてのメソッドに対して以下の命名規則を使用してください。

-   AddRelatedEntityName(例:AddLineItem)
-   RemoveRelatedEntityName(例:RemoveLineItem)
-   UpdateRelatedEntityName(例:UpdateLineItem)

## リクエストパラメータ

サービスメソッドは単一のリクエストオブジェクトをパラメータとして取り、そのリクエストオブジェクトはServiceProviderRequestから継承しなければなりません。複数のパラメータの代わりに単一のリクエストオブジェクトを使うと、カスタマイズに関わらず同じサービスメソッドが使用可能です。サービスメソッドは動作に追加データを必要とするため、新しいパラメータでリクエストオブジェクトを拡張するだけで、サービスメソッドを変更することなく新たに必要なデータをプレゼンテーション層に公開できます。

## リクエストオブジェクトのカスタマイズ

リクエストオブジェクトを拡張してより多くのパラメータを扱う場合、2つの選択肢があります。1つ目の選択肢は、適切なリクエストクラスを単純に拡張することです。これは以下の例に似ています:

public class CustomLoadCartRequest : LoadCartRequest
 {
 public CustomLoadCartRequest(string shopName, string cartId,
 string userId, string customProperty)
 :base(shopName, cartId, userId)
 {
 this.customProperty = customProperty;
 }
 public string customProperty { get; protected set; }
 }

場合によっては、申請を延長できない場合もあります。代わりに、申請書のプロパティバッグを使って、希望する物件を譲ることができます:

request.Properties"customProperty" = "customValue";
## 結果オブジェクト

結果オブジェクトは一般的にリクエストオブジェクトをミラーリングしますが、ServiceProviderResultから継承し、システムメッセージのコレクションを持つ点が異なります。可能であれば、例外ではなくシステムメッセージを必ず返してください。

結果に対してメッセージを設定する方法は以下のパターンです:

var message = (SystemMessage)this.entityFactory.Create("SystemMessage");
message.Message = “your custom error message goes here”;
args.Result.SystemMessages.Add(message);