11

SteveFreemanとNatPryceによるテストに導かれたGrowingObject-OrientedSoftwareを読み、非常に感銘を受けました。例はJavaで書かれていますが、RSpecを使用するRailsプロジェクトでこの本のアイデアを採用したいと思います。

この本の基本的な原則は、具象クラスの代わりにインターフェースをモックするべきであるということです。インターフェイスを抽出して名前を付けることで、アプリケーションの設計を改善できると言われています。

ただし、RubyにはJavaと同等の構文はありませんinterface。Railsプロジェクトに彼らのテクニックをどのように活用できますか?

アップデート

たとえば、126ページで、作成者はメソッドAuctionを実装するためのインターフェイスを紹介しましたbid。最初に、彼らAuction.classはテストに合格するために嘲笑し、次にAuctionクラスに匿名の内部クラスとしてクラスを実装しましたMain。最後に、彼らは(131-132ページ)XMPPAuctionから新しい具象クラスを抽出しました。Main

この漸進的なアプローチは、私の意見ではこの本の核心です。

Ruby開発でこのような一連のコード変換を採用または模倣するにはどうすればよいですか?

4

3 に答える 3

6

rubyのインターフェースの良い説明については、この以前のStackOverflowの回答を確認してください。

また、Rubyの実用的なオブジェクト指向デザインは、 Growing Object Oriented Softwareの本と似ていますが、ルビーの例があります。それをチェックする価値があります。

于 2012-10-28T04:07:31.817 に答える
3

Rubyでは、すべてがダックタイプであり、インターフェイスは公開されているフィールドとメソッドのセットであるため、次の1つ以上を実行できます。

テスト

インターフェイスをテストするようにテストを設計し、テストに適切な名前を付けてコメントを付けます。そうすれば、「インターフェイス」のすべての「具体的な実装」を同じテストスイートに渡すことができます。テストスイートがアプリケーションのエッジケースをカバーしている限り、これらの具象クラスのいずれかのインスタンスを取得するアプリケーション内のすべてのものが、他の具象クラスのインスタンスを処理できます。

基本クラスを使用する

すべての具象クラスが、すべてのメソッドがNotImplementedエラーをスローする場所から継承する基本クラスを定義します。これにより、視覚化できる階層が得られます。ただし、追加のクラスが必要であり、にis a依存するコードではなく、本番コードで多数のテストを行うことができますhas a

于 2012-10-28T03:59:35.043 に答える
2

Rubyには正式なインターフェースがないのは確かです。代わりに、インターフェイスはオブジェクトが処理するメッセージに暗黙的に含まれます(ダックタイピングを参照)。

Rubyでインターフェースを「強制」するためのより正式な方法をまだ探している場合は、オブジェクトがインターフェースに適切に準拠している場合は緑色、それ以外の場合は赤色の一連の自動単体テストを作成することを検討してください。

例については、ActiveModel :: Lint::Testsおよびrspecの共有例を参照してください。

于 2012-10-29T01:22:16.067 に答える