私は、ほとんどの開発者がWebサービスへの契約をどのように設計しているかを知りたいのです。私はサービスアーキテクチャー、特にWCFの初心者には全く新しいものです。Webサービス契約設計 - 単一責任
要するに、操作で返されるオブジェクトのタイプを確認したいと思います。サービス内の各操作で同じオブジェクトが返されますか?例えば
次の点を考慮してください 現在、私はに似ServiceBaseオブジェクトから継承し作成したすべてのサービス:したがって
public interface IAppResponse<TDto>
where TDto : IDto
{
List<TDto>
Data { get; }
ValidationResults ValidationResults { get; }
RequestStatus Status { get; }
}
:
public abstract class AppServiceBase<TDto>
: DisposableObjectBase where TDto : IDto
{
protected IAppRequest Request { get; set; }
protected IAppResponse<TDto>
Response { get; set; }
}
Response
のようなものを構成するリターンオブジェクトを表し派生したサービスは、同じオブジェクトで構成された応答を返します。 最初は、各サービスが1つのオブジェクトに責任を持つようにするために、良いデザインになると感じました。ほとんどの場合、これはうまくいっていますが、私のサービスが成長するにつれて、私はこのデザインに疑問を感じました。
例: あなたが書いている音楽サービスがあり、あなたのサービスの1つが「アルバム」になります。 基本的なCRUD操作を書いていて、ほとんどすべてがAlbumDtoのコレクションを返します。
アルバムの種類を返す操作を書きたい場合はどうなりますか? (LP、Single、EPなど) オブジェクトAlbumTypesDtoがあります。このオブジェクトのためだけに新しいサービスを作成するか、アルバムサービスが多くの異なるオブジェクトを返すようにしますか?
複雑なサービスで、さまざまな戻り値の型があり、煩雑でデザインが貧弱だとは思いますが、おそらく1つまたは2つのサービス操作メソッドが過度に使用されている可能性があるために、
あなたはどう思いますか?
お返事ありがとうございます。私は過去1年間DDDに取り組んできましたが、今まではサービス層は必要ありませんでした。あなたが意味することを明確にしてください:「あなたのビジネスロジックは、あなたのサービスを消費しているものに結びつくでしょう。 あなたの回答に基づいて、契約操作を単一の応答タイプに制限するのではなく、問題に関連するオブジェクトのみを返すようにしてください。私はDDDとサービス層デザインについて読んでいきます。 – Daniel
ビジネスロジックはCRUDルーチンを使用します。 CRUDをWEBサービスに実装することは、コンシューマー(この場合はSilverlightアプリケーション)がビジネスロジックをホストすることを意味します。私の考えでは、ビジネス・ロジックをWebサービスにカプセル化して、Silverlightアプリケーションだけがプレゼンテーションに心配する必要があります。 – Slappy