2

これは主観的な質問だと思いますが、人々の意見に興味があります...

今日、職場で次の方法を見ました....

public T execute(T dto){...return dto;}

これは私には冗長に思えましたが、私の考えでは、これはより優れていました...

public void execute(T dto)

今のところ、このメソッドでは、以下が呼び出されているとしましょう....

dto.setProperty(something);

しかし、同僚 (およびいくつかの StackOverflow の投稿) は、メソッドが T オブジェクトを変更している可能性があることを示唆していないため、これは悪いことだと示唆しています。ただし、これはスタック内のオブジェクトに反映される必要があるため、なぜリターンが必要なのですか。

これは正当な理由ですか、私にはこれがオーバーヘッドの増加を引き起こさなければならないように思えます (公平を期すために、ここでは Java を使用しています)

どちらが優れているかについての洞察はありますか?

4

3 に答える 3

5

これTは、Tが不変であるかどうか、および何が行われるかによって異なりexecuteます。この質問は、実際にはこれ以上一般的ではなく、詳細が重要です。

void addPerson(Club clubFullOfPeople, Person person);

T clone(T t);

両方とも有効であり、良いデザインとして私を襲うでしょう。

あなたの正確な質問に答えるために-あなたは信号の可変性に戻るべきですか?それは、IMの可変性を示すものとして私を絶対に驚かせます。そうでない場合は、絶対にそうではありませんが、これを伝えるには、より明確な変数名、ドキュメントなどが必要です。

于 2012-10-19T14:37:45.693 に答える
0

これは不合理なスタイルではありません。単純に (プロジェクトごとに) 決定する必要があります。作業環境で使用されているスタイルを採用してください。次のプロジェクト/ジョブは別の方法で選択する場合があります。

于 2012-10-19T14:36:12.377 に答える
0

どちらのスタイルも、DTO を変更できるかできないかを意味しません。実際、どちらかといえば、最初の形式は、パラメーター化された DTO が変更されていないことを示唆していますが、変更が行われている場合は、返されたオブジェクトで行われます。

DTO を返す利点:

  1. 呼び出しを連鎖させることができます (これは、コーディング スタイルと実際のメソッド/オブジェクトの使用に応じて、良い場合も悪い場合もあります)。たとえば、jQuery はほぼすべての呼び出しを連鎖できるように構築されています。
  2. null 値またはその他のオブジェクト/形式の DTO を返して、何らかの失敗を示すことができます。

「優先」表記では、失敗を示すことができる唯一の方法は、ランタイム例外を使用することです。メソッドが何を達成することになっているのかわからないexecute場合、これは問題ないか、フロー制御を処理するために例外が使用されているという大きな問題を示している可能性があります (悪いことです)。

最終結果?「より良い」解決策はないと思います。既存のコードベースで現在行っていることにより一致するものです。

于 2012-10-19T15:04:15.970 に答える