クラスを使用してモジュールを構築するためのベストプラクティス


19

遅延/自動ロードがDrupal 7にあるので、クラスとしてモジュールの構築を開始したいと考えています。そして、素晴らしい仕事をしているいくつかのモジュール(contribまたはcore)を見てみたいです。

クラスをフックとして統合する創造的な方法はありますか?各機能をctoolsプラグインとして実装しますか?

通行人は、D7がauto / lazy-loadingクラス/インターフェイス用のfiles[]モジュール.infoファイルに新しい宣言を追加することに注意する必要があります。.infoファイル(Drupal 7.x)を記述します

以下は、オブジェクト指向の観点から DrupalコミュニティのDrupalプログラミングから動機付けと構成(現状)を取得するための良い読み物です。

回答:


16

モジュールは Crellによるクラスではないため、最初に読む必要があります。

Drupal 7の最大のOOPパートは、新しいデータベース抽象化レイヤー(まったく同じCrellなどによって設計された)です。これは、再利用可能な、また再利用すべき多くのパターンを実装しています。

例えば:

何かまだcontroversaly議論がある情報隠蔽。DBTNGは、クラスプロパティを保護し、直接アクセスを許可しないことにより、それを実装します。一方、hook_query_alter()があり、参照ゲッターメソッドによってさまざまに変更できます。


すばらしい答えです。モジュールコードを構造化する際に思考を更新するための膨大なリソースがあります。
-electblake

3

これは興味深い質問です。

クラスとしてのDrupalモジュールのアイデアは非常に興味深いものです。ただし、D7モジュールでも、名前でチェックされるフック関数を実装するだけなので、モジュールのクラスを作成した場合でも、それらを呼び出すためにフック関数を実装する必要があります。

ただし、多くのモジュールはクラスを内部で使用し、これらのクラスを介して機能を公開します。最も明白な例はビューです。だから、それは見て良い場所かもしれません。ただし、多くのモジュールが独自の方法でクラスを使用しているため、ビューを見ることで学んだことは常に適用できるとは限らないことに注意してください。


洞察力に感謝し、Drupal内で適切に登録するためにhook_functionsがまだ必要だと思いましたが、モジュールの実装方法に興味があります。私はビューモジュールを見ていきます(そして、できれば迷子にならないように)-見つかったパターンの孤立したケース/例を見つけたら、答えを更新してください:D
electblake

2

エンティティAPI(contribモジュール)を使用すると、エンティティタイプごとに「エンティティクラス」を宣言できるため、エンティティに関連するすべてのコード(作成、ロード、保存、アクセスなど)をクラスに入れることができます(Organicたとえば、グループが行います)。

とはいえ、無理をしないでください。ctoolsプラグインは、必要な場合(次のビュー、パネル、またはルールを作成している場合)に便利ですが、イデオロギーの純粋さのためだけにクラスを使用することはあまり役に立ちません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.