2

以下は私のインターフェースです -

public interface IClient {
    public String executeSync(ClientInput input);
}

これは私のインターフェースの実装です -

public class TestingClient implements IClient {

    @Override
    public String executeSync(ClientInput input) {

    }
}

今、私はTestingClientこのようなインスタンスを取得するファクトリを持っています -

IClient client = TestingClientFactory.getInstance();

ここで、顧客はパラメーターを受け入れるexecuteSyncmy のメソッドを呼び出します。以下は のクラスです。TestingClientClientInputClientInput

public final class ClientInput {

    private Long userid;
    private Long clientid;
    private Long timeout = 20L;
    private boolean debug;
    private Map<String, String> parameterMap;

    public ClientInput(Long userid, Long clientid, Map<String, String> parameterMap, Long timeout, boolean debug) {
        this.userid = userid;
        this.clientid = clientid;
        this.parameterMap = parameterMap;
        this.timeout = timeout;
        this.debug = debug;
    }

 ... //getters here
}    

したがって、顧客が のexecuteSyncメソッドを呼び出すと、このようにパラメータTestingClientを作成しClientInput、ファクトリを使用して のインスタンスを取得し、TestingClientそれに応じて executeSync メソッドを呼び出します。

Map<String, String> paramMap = new HashMap<String, String>();
paramMap.put("attribute", "segmentation");

ClientInput input = new ClientInput(109739281L, 20L, paramMap, 1000L, true);

IClient client = TestingClientFactory.getInstance();
client.executeSync(input);

問題文:-

  1. ClientInputこれは、上記のようにパラメーターを作成してexecuteSyncメソッドに渡す正しい方法ですか?
  2. ClientInput にはすでに Long 型の引数が 3 つあるため、他の開発者には、どのフィールドがどの位置にあるのかが明確ではない可能性があります (特に長い夜の間は...)。これを回避する方法はありますか?
  3. より多くの入力が必要な場合は、コンストラクターの宣言が長くなります。どうすればこの状況を克服できますか?
4

4 に答える 4

1

この場合、コンストラクターではなく、これらすべてのフィールドをセッターとゲッターで使用することをお勧めします

private Long userid;
private Long clientid;
private Long timeout = 20L;
private boolean debug;
private Map<String, String> parameterMap;
于 2014-01-10T06:59:37.097 に答える
0

1 あなたがやったように聞こえます。メソッドは、すべての情報を含むラップされたオブジェクトをパラメーターとして受け取ります->オブジェクト内の情報が変更されたかのように、メソッドを変更する必要がないという優れた設計。明らかに、5 つの異なるパラメーターを取るメソッドを使用するよりも優れています。

2 メソッドを呼び出す通常の方法は次のようになると思います。

Map<String, String> paramMap = new HashMap<String, String>();
paramMap.put("attribute", "segmentation");

ClientInput input = new ClientInput(user.getUserId(), client.getClientId(), 20L, paramMap, 1000L, true);

IClient client = TestingClientFactory.getInstance();
client.executeSync(input);

十分に明確で、間違いを避けることができます

3. より多くのパラメーターが表示される可能性がある場合は、呼び出し元のオブジェクト (構成) を作成するために使用される他のラッピング クラスにそれらをグループ化してみてください。

于 2014-01-10T07:03:47.573 に答える