ほかにプレゼンテーション・抽象化・制御および他のパターンされているDrupalのコアに使用される、目立つよりで使用される任意の他のデザインパターンがある人気の貢献モジュールなどのビュー、CCK、および機能などは?
ほかにプレゼンテーション・抽象化・制御および他のパターンされているDrupalのコアに使用される、目立つよりで使用される任意の他のデザインパターンがある人気の貢献モジュールなどのビュー、CCK、および機能などは?
回答:
開始する1つの場所は、コア自体とcontribに公開されたパターンです。-Larry Garfield(Crell)による素晴らしい記事は、Drupal Watchdogの記事にあります。
オブザーバー、ビジター、覗きトム
Drupalは、実際にはオブザーバーとビジターのツインパターンに基づいて構築されていますが、名前では呼ばれていません。代わりに、それらをフックと呼びます。
hook_node_load()
、hook_user_login()
、などのノードとユーザーのオブザーバーは、本質的に、です。hook_form_alter()
、hook_node_view()
、など、本質的には、訪問者です。Drupalはこの2つを区別しないため、一部のフックは間違いなく両方のパターンと見なすことができますが、原理は同じです。工場とコマンド
Factoryパターンにはいくつかのバリエーションがありますが、それらはすべて同じアイデアに要約されます。あるオブジェクト(クライアント)は別のオブジェクト(ファクトリー)にロジックの適切な実装を要求しますが、それがどちらであるかは気にしません。それは決定する工場次第です。
db_insert()
関数を考えてみましょう。その重要なビットを以下に示します。function db_insert($table, array $options = array()) { // ... return Database::getConnection($options['target'])->insert($table, $options); }
Database::getConnection()
この方法は、このサイトの接続オブジェクトを返します適切な工場です。ドループ・ドクターのディペンデンシー・インジェクション
Drupal 6では、メニューシステムが骨抜きになり、マルチステッププロセスに書き直されました。次のように、同じページコールバックを実装します。
function example_menu() { $items['node/%node/example'] = array( 'page callback' => 'example_page', 'page arguments' => array(1), // ... ); return $items; } function example_page($node) { // Do useful stuff here. }
この新しいセットアップでは、メニュールーターはより複雑になります。ただし、その代わりに、ページコールバックは、それが渡される依存先のノードを取得します。つまり、ノードに注入されます。これには多くの利点があります。
Broke(r)に行く
一般的なアプローチの1つは、ブローカーまたはメディエーターのアイデアのバリエーションです。この設計では、オブジェクトは別のオブジェクトからの情報を直接要求しません。代わりに、挿入された可能性のある中間オブジェクトに、代わりにそのような要求を行うように要求します。それでも、最初のオブジェクトが積極的に情報を要求する必要があることを意味しますが、メディエーターオブジェクトに密に結合されており、情報を要求する必要のある無数の他のオブジェクトには結合されていません。つまり、これらの他のシステムが変更された場合、メディエーターを更新するだけでよく、それに関係するすべてのシステムを更新する必要はありません。