1

これは素朴な質問かもしれませんが、RSpec のテスト DSL はデメテルの法則に違反していますか?

http://rspec.infoからの RSpec DSL の例を次に示します。

bowling.score.should eq(0)

Demeter の観点からは、これは次の例と見分けがつかないように思えます。

user.department.try(:name)

Avdi Grimm によると、これデメテルの法則に違反しています。

ソース: http://devblog.avdi.org/2011/07/05/demeter-its-not-just-a-good-idea-its-the-law/

4

2 に答える 2

2

Demeter は、システムの一部が他の部分の構造に依存しないほど、その部分がその構造の変更によって影響を受ける可能性が低くなるという考えに基づいたリスク削減ガイドラインです。

game.score.should eq(0)確かにそれはデメテル違反であると主張することができますが、shouldメソッドは rspec フレームワークの一部であり、ステートメントの周りのコンテキストであり、game.score.should eq(0)このステートメントを強制的に変更するような方法で変更される可能性は低いです。

デメテルに違反しているかもしれないし、違反していないかもしれませんが、デメテルが対処しようとしているリスクは実際には存在しません。

于 2012-03-02T03:42:17.523 に答える