2011-06-30 7 views
1

同じデータベースに複数の(5+)アプリケーションがあり、アプリケーションがすべて同じデータを取得するクエリを作成するという問題が発生しています。しかし、異なる開発者がこれらのクエリを作成しているので、それらは同じではないので、時々異なる結果が返されます。ビジネスクエリをカプセル化するためのサービスを作成する

私が見る限り、2つの解決策があります。

  1. 各アプリケーションの参照は、各アプリケーションで使用される一般的なクエリをカプセル化するWCFサービスを作成し、適切なクエリ
  2. を取得し、

私は」を使用するアプリケーションごとにクライアントを作成するためのライブラリを作成します。これは、クエリで使用しているフィルタを変更して、各アプリケーションを一度に更新する柔軟性を与えるので、オプション2に傾いています。

サービス階層は、次にQueryServiceと相互作用するクライアントを作成

public class QueryService 
{ 
    private readonly IRepository _repository; 

    public QueryService(IRepository repository) 
    { 
     _repository = repository; 
    } 

    public IEnumerable<int> GetCommonOperation() 
    { 
     return _repository.GetCommonOperation(); 
    } 

    public IEnumerable<AnotherDto> AnotherCommonOperation() 
    { 
     return _repository.AnotherCommonOperation(); 
    } 
} 

ようになります。

私の質問なぜいくつかのアプリケーションで一般的に使用されるクエリ/操作をカプセル化する唯一の目的でクエリサービスを作成する一般的なアプローチはありますか?

答えて

1

あなたは既にあなた自身の質問に答えました。基本的には、Webサービス(またはWCF)が実現するように、インプリメンテーションからインタフェースを分離する必要があります。アセンブリを作成する場合は、依然として、別個のクライアント、または少なくともそのアセンブリを利用しているすべてのアプリケーションがアクセス可能な場所にアセンブリを配置する必要があります。はるかに多くの仕事のように思えます。ただし、サービスシグネチャを変更すると、そのサービスを利用するクライアントも新しい定義を反映するように更新する必要があります。

Webサービス(WSDL)の素晴らしい点は、それが一般的だということです。特定のビルドまたはOSを対象とするアセンブリとは異なり、WSDLを消費して解析できる言語でクライアントを記述できます。だからあなたはC#、Java、iOS、Androidなどのクライアントを持っているかどうか、彼らはすべてあなたのサービスを利用することができます。

+0

これはその答えです。ハハ返信ありがとう。 – gcso

関連する問題