8

ServiceStack の最初の小規模な実装を構築しています。クライアントとサーバー間で共有される別のアセンブリに配置されている DTO について明確にする必要があります。

新しい API の WIKI ページでは、 DTO について次のことを推奨しています。

サービス開発では、サービス DTO は、最大限のアクセシビリティと再利用の可能性のために、クリーンで可能な限り「依存関係のない」状態に保ちたいテクノロジに依存しないサービス レイヤーを提供します。サービス DTO は、ほとんど依存関係のない別個のアセンブリに保持することをお勧めします。

このスニペットもあります

*しかし、DTO を (バイナリ形式のいずれかのソースで) コピーする通常のルートを使用して、クライアントに次のようなものがあるとします。

[Route("/reqstars")]
public class AllReqstars : IReturn<List<Reqstar>> { }

The code on the client now just becomes:

var client = new JsonServiceClient(BaseUri);
List<Reqstar> response = client.Get(new AllReqstars());

/reqstars ルートに GET Web リクエストを送信します。カスタムルートがクライアントに存在しない場合、ServiceStack の事前定義されたルートを使用するように自動的にフォールバックします。

私の質問は...「ほとんど依存関係がない」アセンブリは、DTO クラスのルート属性のために ServiceStack に依存する必要がありますか?

4

1 に答える 1

7

[Route]属性は ServiceStack.Interfaces プロジェクトに存在するため必要なのは依存関係への参照と impl-free ServiceStack.Interfaces.dllだけです。これは仕様によるものです。可能な限り最小限の依存関係を確保したいため、Interfaces プロジェクトの DTO で使用する可能性のあるすべてのメタデータ属性を保持しようとします。

DTO を別のアセンブリに保持したい理由は、それを使用するためにクライアントが必要とする依存関係を減らすためです。これにより、侵襲性が低くなり、クライアントにとってアクセスしやすくなります。また、DTO はサービス コントラクトを表します。それらを分離しておくことで、実装か​​ら分離することをお勧めします。これは引き続き自由にリファクタリングできるようにしたいためです。

于 2012-11-30T17:53:48.473 に答える