Block関数がResourceModel関数を呼び出すことはベストプラクティスですか?


7

Blockクラスが、Modelクラスではなく、ResourceModelクラスの関数を介してデータを取得することは適切ですか?
または、ブロックはモデルを呼び出し、次にリソースモデルに呼び出しを渡す必要がありますか?

BlockからResourceModelに直接移動するのが最も簡単で、考えられるかなりの数の関数の重複を回避できますが、それは悪い形式であり、ベストプラクティスのパターンを壊すと思いますか?

回答:


3

これはまったく問題ありません。実際、コントローラーでリソースモデルをインスタンス化する以外に、これはそのように機能することを目的としています。リソースモデルはMagentoの特別なタイプのモデルで、データソースからデータを取り込みます。

Magentoコアを調べると、ブロックでリソースモデルを使用する多くのインスタンスが表示されます。多くの場合、これが起こっていることに気づかないのは、次のように書かれていることが多いためです。

Mage::getModel('catalog/product')->getCollection();

ブロックのメソッドはそれをテンプレートに提供して利用します-通常は繰り返します。


1
リプレイありがとうございます。私はあなたを捕まえると思いますが Mage::getResourceModel('log/visitor')->getStartOfLog() 、ブロックではどうですか?(ドメイン)モデルレイヤーをバイパスしませんか?
fris 2015

3

理論的には、誰かがリソースモデルクラスを変更した可能性があるため、これは悪い形だと思います(ほとんどありません)。しかし、それは場合によります。実用的な例の1つは、カテゴリと製品のリソースモデル(およびリソースコレクション)です。それらを直接インスタンス化すると、適切なモデル(フラットまたはノーマル)が得られない場合があります。それが実際に問題になる唯一の例だと思います。


それはおそらく理論上の純粋主義者対日常の実用主義者のケースであることに同意します。
2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.