2016-08-24 22 views
1

(端末またはレールコンソールの)オブジェクトを見ると、それがPOROかどうかをどのように判断できますか?オブジェクトがPOROかどうかをどのように判断できますか?

私は、オブジェクトがRuby(Railsに依存しない)であることを理解しています。しかし、私は現実的に理解できません。

たとえば、puts @a_form.inspectをコンソールに印刷すると、それはPOROですか?

#<AForm:0x007fdbf9b33468 @a=#<A id: 1,... 

私はグーグルをたくさんやったが、非ポロオブジェクトと比較例との単純な答えを見つけることができます。

実用的な比較は誰でもできますか?

これは超初心者の質問であれば、事前に謝罪してください。

答えて

2

「普通の古いRubyオブジェクト」というものは本当にありません。実際にはすべてがオブジェクトなので、「プレーン」という概念はありません。あなたは非平野をどのように定義しますか?

これは単純なオブジェクトプリミティブがあるJavaScriptとは異なり、ES6 classのようなものを使って正式に宣言されたものです。コンテナとして渡されるJavaScriptオブジェクトは共通のパターンです。 Rubyの同等の機能は、潜在的にネストされた要素を持つHas​​hのような複雑なデータ構造を渡すことです。

あなたがオブジェクトのクラスを知りたい場合は、次の

@a_form.class 

あなたは、これはから継承かを知りたい場合は、次の

@a_form.superclass # Immediate parent 
@a_form.class.ancestors # All base classes and mixin modules 

匿名クラスRubyで、作られたものがあります。 Class.newで作成され、それらで作成されたオブジェクトは、あなたが得ることができるほど一般的ですが、それでもファーストクラスのオブジェクトです。

2

PORO(Plain Old Ruby Objectの略)とPORO以外の区別は技術的なものではありません。すべてのオブジェクトは技術的にRubyオブジェクトです

代わりに、POROという用語は、Railsのような大規模な「大」複雑なオブジェクト(ロジックの大半はActiveRecordモデルなど)を使用する傾向のある大きなフレームワークについて言及するときに使用されることがあります。これらの大きなオブジェクトは、大量のロジックと定義された動作を含む傾向があります。

POROについて言及するとき、一般的に、これらの大きなオブジェクトと区別して、より小さい特定のクラス/オブジェクトを使用してビジネスロジックを構築することを推奨します。これらのオブジェクトは、ActiveRecordモデルが一般的には飛行中のデータを含み、ビジネスロジック(一般にアプリケーションの動作と呼ぶもの)を定義するだけであるため、安定したストレージでバックアップする必要はありません。

しかし、これも技術的な区別ではなく、明確な境界線でもありません。これは、一般に単一の枠組みの外で思考を促すことを目指す社会的な区別です。

用語自体は、それは比較的新しいものであり、現実には何の意味もないかなり(おそらくそれを推測しています)。最近、大規模なRailsアプリケーション(リーンコントローラ、脂肪モデル)がある傾向がある、つまりビジネスロジック全体をActiveRecordモデルに入れているという不満を抱いている人々に人気が高まっています。したがって、この用語は、ほとんどの場合、これらの脂肪モデルとは区別されます。

関連する問題