1

私たちのチームでは、(分離された DB DTO を超えて) ビジネス ロジック アセンブリの階層を通じて、要求と応答の DTO を使用します。

ビジネス ロジック レイヤーで SS に依存しないという要件があります。

したがって、IReturn または IReturnVoid インターフェイスは使用しません。継承のない単純な c# オブジェクトのみを使用します。

ルーティングに関しては、AppHost.Configure でFluent APIを使用して、基本的にルーティング テーブルを作成します。

私たちの場合、ServiceStack は非常にうまく動作します。

私たちの Service.Model は、依存関係なしに、ビジネス ロジック レイヤーから使用できます。

サービス関数は実際にはシン ラッパーであり、ビジネス ロジック関数を呼び出して、応答 DTO を返します。

ただし、JsonServiceClient.Get 関数は、IReturn オブジェクトをパラメーターとしてのみ、または直接 URI を受け入れます。

Post 関数のように、 object を parameter として受け入れません。

何かアドバイス ?

更新 1

神話,

IReturn については、残念ながら私たちの場合、ビジネス ロジック モジュールで使用しない要件があり、

より軽い SS 依存性でさえ。

サービス関数は、ビジネス モジュールを呼び出すシン ラッパーです。

2 つのレイヤー間のリンクは、要求と応答の DTO のみです。私たちはこのアプローチをとても気に入っています。

はい、それらは「メッセージ操作」ですが、アプリケーション層の間でもメッセージとして機能します。

また、私のクライアントは主に C# ではなく Jquery Ajax です。モバイルのおかげで、大多数が Jquery Ajax に傾倒しました。

したがって、この場合、IReturn でマークされていないオブジェクトのみを使用できます。ServiceStack の動作は非常に良好です。

4

1 に答える 1

1

API はIReturn<TResponse>、DTO やオブジェクトだけでなく、リクエスト DTO のみを受け入れて動作することを明確にするためにのみ受け入れます。リクエスト DTO は「メッセージ操作」であり、他の目的で再利用すべきではありません。DTO タイプは再利用できますが、外部向けのサービス コントラクトであるリクエスト DTO は再利用できず、他の懸念事項と結合してはなりません。

[Route]IReturn<T>[Api]、などの DTO 属性は[Restrict]、C# では表現できない単なる追加のメタデータですが、DTO プロパティのタイプを定義するのと同じように、サービスを説明するメタデータでもあります。クライアントでも共有可能になり、内省可能になります。たとえば、ServiceClient は で定義されたカスタム ルートのみを使用でき[Route]ます。これは、クライアントが持つ唯一の情報であるためです。何もない場合は、事前定義されたルートを使用するようにフォールバックすることになります。

ServiceStack はIReturn<T>、リクエスト DTO を見てサービスについてより多くのことを推測できるようにするため、マーカーの定義を推奨し、サービスが同じ型を返すことを確実に制限し (グッド プラクティス)、異なるものに分散するのではなく、サービスが返すものを一元化します (より詳細な/つまり、サービスが返す応答を変更すると、更新が必要な呼び出しサイトに関するコンパイラ フィードバックが得られます。誰もがこの情報/動作を認識しているわけではないため、ServiceStack はIReturn<T>マーカーの使用を奨励することで、この「成功の落とし穴」開発を促進したいと考えています。

依存関係に関しては、DTO が参照する必要がある唯一の依存関係は、ServiceStack.Interfaces.dll意図的に軽量で impl を使用しない dll です。v3ではServiceStack.Common NuGet pkgを参照する必要がありますが、 v4 では、DTO が参照できる最小/最軽量の依存関係を提供するスタンドアロンのServiceStack.Interfaces NuGet pkg を提供します。

于 2013-09-23T18:57:44.913 に答える