Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

エッジケースが完璧なソリューションに穴を開けるとき

あなたはあなたのクレイジーなテスト問題に対する完璧な解決策を見つけました。あなたがしなければならないのは、DEFAULT_HOSTをオーバーライドすることだけです 一定であり、あなたはビジネスになります。

その醜いメッセージを消すために警告をオフにしなければならないことを除いて。しかし、 すべてのテストに合格し、数行のコードを変更するだけで済みました!

しないその1つのテストを除いて ホストをオーバーライドしたい。ただし、定数を再度オーバーライドし、警告を再度オフにして、テストの最後にリセットされることを確認することもできます。 完成間近なので、ほとんど味わうことができます!

を除いて…を除いて…を除いて…

そして数日後、27回も行き詰まり、アプリが1つの巨大なハッキングの球になったとき、あなたは腰を下ろして疑問に思うでしょう。なぜ私はやっているのか これ全部? 解決策は問題よりも悪いのではないですか?

賢すぎる問題を解決する方法

元のアイデアでは問題全体が解決されないことは明らかです。では、より良いをどのように考えますか アイデア、それはあなたの元のアイデアができなかったすべてのエッジケースを解決しますか?

できません。 もっと賢くてあまり賢く戦うことはできません。 少なくとも、直接ではありません。代わりに、逆に行ってください。シンプルに。率直に言ってください。

それはどういう意味ですか?

抽象化しようとしていたコードをインライン化します。 実行 繰り返します。コードを明示的にしてください。

DEFAULT_HOSTを上書きしようとした場合 別のデフォルトホストで定数、デフォルトの全体的な考え方を忘れてください。毎回指定するだけです。

したがって、代わりに:

test / Integration / welcome_test.rb
require 'test_helper'

silence_warnings do
  Rack::Test::DEFAULT_HOST = "www.justinweiss.com"
end

class WelcomeTest < ActionDispatch::IntegrationTest
  include Rack::Test::Methods
  
  test "can visit the homepage" do
    get "/"
    # ...
  end

  # ...
end

次のようなことをします:

test / Integration / welcome_test.rb
require 'test_helper'

class WelcomeTest < ActionDispatch::IntegrationTest
  test "can visit the homepage" do
    get "https://www.justinweiss.com/"
    # ...
  end
  # ...
end

一見完璧に見えるソリューションが機能しなくなったときはいつでも、最終的に処理しなければならないエッジケースを想像していなかったためです。

大丈夫です。将来を予測することはできません。しかし、それが起こっていることに気づいたら、掘るのをやめてください。パッチごとにパッチを適用するだけではいけません。代わりに、元のソリューションをほどいて抽出 より良いもの。

より良いソリューションを抽出する方法

すべてのコードを明示的でわかりやすい方法で書き出すと、コードを再編成する方法を考え始めるでしょう。

通常、適切な場所にExtractメソッドまたはExtractクラスを適用するだけで十分です。秘訣は、その正しい場所が何であるかを決定することです。しかし、目の前にたくさんの繰り返しがあると、それを理解するのがはるかに簡単になります。

そして、継承と委任に頼ります。これらは、賢くなりすぎずにコードをクリーンアップするのに役立つ単純な構成要素です。

もう1つ

ドキュメントを読むことを忘れないでください:

test / Integration / welcome_test.rb
require 'test_helper'

class WelcomeTest < ActionDispatch::IntegrationTest

  setup do
    # This already exists:
    host! "www.justinweiss.com"
  end
  
  test "can visit the homepage" do
    get "/"
    # ...
  end
  # ...
end

答えは必ずしも明白ではありません。 しかし、3つのクラスと解決すべき宝石を書いた正確な問題に対する1つのメソッドの組み込みソリューションがあることに気付くほど、謙虚なことはありません。

最終的にはより良いソリューション

通常、2番目のソリューションはあらゆる方法で優れています。 元のものより。

なぜですか?

  • 開発者としての経験が豊富です。

    そのため、何が優れたコードになるのかをよりよく理解できます。

  • 構築したシステムについて詳しく知っています。

    そのため、作成しているコードがそれにどのように適合するかについて、より適切な決定を下すことができます。

  • どの仮定が間違っていたか知っています

    したがって、あなたの解決策は、あなたが想像したものではなく、存在する実際の問題によりよく適合することができます 存在します。

そして、最終的には、あなたの賢さを最大限に活かす場所があるかもしれません。今回は、ハックなしで。​​

掘るのをやめなければなりません

賢いコードは書くのが楽しいです。 Rubyでは、書くのも簡単です。 そして、間違った場所に連れて行ってしまうことがわかっている場合でも、道を進み続けるのは特に簡単です。

しかし、何かが正しくないというしつこい感覚を感じたら、ちょっと立ち止まってください。コードの因数分解を解除します。ドキュメントを読んでください。コードをわかりやすく明示的にします。そして、より良い方法を見つけてください。

最後に終わらない穴を掘り続けた時のことを覚えていますか? あなたはどうでしたか それから抜け出しますか?そして、最終的に得られたコードはどのようになりましたか?


  1. Wise Video Converter:完璧なビデオ フォーマット ソリューション!

    Wise Video Converter は、世界中で最も人気のあるビデオ変換ソフトウェアの 1 つです。あらゆるマルチメディア デバイスで簡単に再生できる任意のファイル形式にビデオを変換することは、これまでになく簡単になりました。ソフトウェアは、USB ドライブまたはメモリ カードに簡単にラップでき、外出先で使用できるポータブル バージョンで利用できます。このコンバーターは、ビデオ クリップをスマートフォン、タブレットのゲーム パッド、または PC ですばやく再生するように構成するのに最適です。 主な機能 使いやすいコンソール 簡単、高速、効果的な使い方 ワンクリック動画変換を提供

  2. エッジ コンピューティング:いつ導入すべきか

    エッジ コンピューティングは、クラウド コンピューティングを補完します。ただし、多くの組織は、エッジ コンピューティングが必要なのか、それともテクノロジーを採用するには時期尚早なのか、いまだにジレンマに陥っています。クラウド コンピューティングについて情報に基づいた決定を下すには、まず、エッジ コンピューティングが必要な理由を内省する必要があります。人気があるからでしょうか?テクノロジーの要素を理解してから、すぐに必要かどうかを検討してください。 この記事では、エッジ コンピューティングに切り替える必要があるかどうかを判断する 3 つの重要な要素について説明します。続きを読む エッジ