0

ベスト プラクティスでは、メソッドが 1 つのことだけを担当する必要があることが継続的に規定されています。3 つのことを行うメソッドに出会いましたが、1. ベスト プラクティスに従って分解する方法がわかりません。2.名前を付けます。また、テキストブックが常にアドバイスしているように、実生活で実際に1つのことだけを実行するメソッドがどれだけあるのだろうか?

method ( entryId ) {
   if (this.checkDuplicate(entryId)) {
       this.deleteDuplicate(entryId);
       return true;
   } else {
       return false;
   } 
}

method という名前のメソッドが 1 つ以上のことを行っていることがわかります。「メソッドは 1 つのことだけを担当する」というルールに従うことさえ可能ですか?

はいの場合、上記のアルゴリズムをどのように分解できますか?

そうでない場合、非常に多くのことを行うメソッドに名前を付けることができますか?

4

3 に答える 3

0

このように言いましょう - そのルール (GRASP - 高結束パターン) は、プログラミング言語のセマンティックや構文に関するものではありません。代わりに、機能的またはビジネスロジックの観点から、メソッド/クラスの責任に注意する必要があることを意味します。ほとんどすべての設計原則は、非常に慎重に注意を払って適用する必要があります。そうしないと、実際の目的を持たない何十もの間接的なレイヤーと抽象的なレイヤーになってしまいます。

于 2015-07-11T00:25:31.983 に答える
0

必ずしも完璧な名前と完全な結束から始める必要はありません。コードの動作を検証するための単体テストがある場合は、いくつかのフェーズでリファクタリングでき、リファクタリングの過程で名前を何度も変更することになる場合があります。何も壊さずに徐々に改善していくという考え方です。

おそらく、メソッドに「deleteEntryIfDuplicate」という名前を付けることから始めて、メソッドがブール値を返す必要がある理由を自問するでしょう。ブール値を使った呼び出しコードを持っていないので、推測するしかありませんが、適切な場所で処理されていない責任があるかもしれません。おそらく、ブール値を返す代わりに、重複エントリの場合のすべての機能を、削除、ログ、リスナーへの通知などを行う単一のメソッドで処理する必要があります。これは責任を追加するように見えるかもしれませんが、重複エントリのケースを管理することは、1 つの責任と見なすことができます。冷蔵庫から卵と牛乳を取り出し、パントリーから小麦粉と砂糖を取り出し、オーブンを予熱する必要がある場合でも、ケーキを焼くのは 1 人の責任です。

すべてを「金メッキ」する必要はないことを付け加えておきます。エンジニアリングはトレードオフです。責任が明確に分離されたクリーンなコードは、長期的には時間とお金を節約しますが、おそらく、すべてを洗練して完成させるための無限の時間はありません。

于 2015-07-11T00:52:56.517 に答える
0

Yauheni Maltsau が書いたことは真実ですが、私は自分の 10 セントを追加したいと思います。

あなたのメソッドは実際には1つのことしかしていないと思います.重複をチェックして削除します. 名前以外はこのままにしておきます。など、よりわかりやすい名前を付ける必要がありますremoveIfDuplicate

于 2015-07-11T00:43:53.970 に答える