2011-07-07 6 views
-1

私は、顧客がCustomerId、DriversLicense、EmailAddress、PhoneNumberの基準で顧客を取得できるようにするカスタマーサービスを提供しています。私の質問は、このサービスのリクエスト/レスポンスを構造化する方法です。私はこれらの基準の複数を要求し、適切な応答を返すことができるようにしたいと思います。指定された条件が満たされていない場合、サービスはnullを返すことに注意してください。複数の結果に対するサービスリクエスト/レスポンス契約ガイドライン

いくつかの選択肢を念頭にジャンプしますが、私は本当に、消耗品、サービス設計するための適切な方法が何であるかを把握しようとしている:各ユースケースのための明示的な契約を締結している)
1:

// psuedo code for operations - proper request/response patterns apply normally 
Customer GetCustomerByCustomerId(string customerId); 
Customer[] GetCustomersByCustomerIds(string[] customerId); 
Customer GetCustomerByEmail(string emailAddress); 
// .. etc. etc. 

2)すべてをカプセル化する単一の要求を持つ。ただし、電話番号は固有の識別子ではありません。

// psuedo code for operations 
Customer[] GetCustomers(string customerId, string email, string phone, string dl); 

Customer[] GetCustomers(string[] customerIds, string[] emails, string[] phoneNumbers, string[] dls); 

私はより読みやすい選択肢であるとして、明示的な参照が、それは、一度サービスにその情報の全てを提出することができてうれしいです、それはそれで何をするかを決定します。 #1の問題はそれが冗長だということですが、すべてのユースケースをカバーしていると思います。 #2の問題は、顧客がどの依頼に属しているかについてクライアントが混乱する可能性があることです。助けてくれてありがとう!

答えて

0

迅速な解決策の1つは、転送オブジェクト自体を検索条件として使用することです。これはquery-by-exampleと非常によく似ています。

例えば、

Customer[] getCustomers(Customer customerFilter) { 
    Query q; // = new query on customer table 
    if(customerFilter.isSetCustomerID()) { 
     // add where clause to the query: 
     //  Customer.CUSTOMER_ID = customerFilter.getCustomerID() 
    } 
    // for each field 
} 

Customer[] getCustomers(Customer[] customerFilters) { 
    Query q; // = new query on customer table 
    // add where clause to the query for each field: 
     // Customer.CUSTOMER_ID IN 
     //  [customerFilter : customerFilters].getCustomerID() 

} 
ような方法を書き換え
関連する問題