주요 기여 모듈에서 발견 된 디자인 패턴은 무엇입니까?


10

게다가 프리젠 테이션 - 추상화 - 제어다른 패턴 되는 드루팔 코어에 사용 , 눈에 띄게 더에서 사용되는 다른 디자인 패턴이 있습니다 인기 기여 모듈 등의 조회수, CCK, 및 기능 등은?


2
자주 묻는 질문 (FAQ) 에보고 된대로 "실제로 직면 한 실제 문제를 기반으로 실용적이고 응답 가능한 질문 만해야합니다. 채팅이 자유롭고 개방적인 질문은 사이트의 유용성을 떨어 뜨리고 다른 질문은 첫 페이지로 넘어갑니다."
kiamlaluno

1
이것은 좋은 커뮤니티 위키 주제일지도 모른다
Chaulky

허용되지 않거나 경계선 인 질문에 대해서는 커뮤니티 위키가 더 이상 사용되지 않습니다. 커뮤니티 위키의 미래를 참조하십시오 .
kiamlaluno

2
다른 한편으로, 나는 이것이 흥미로운 주제라고 생각합니다. 더 나은 질문에 대한 제안 : "문제 X를 해결할 수있는 디자인 패턴이 있습니까?" 그것이 디자인 패턴의 문제이기 때문에 문제를 해결하기 위해서, 그것들을 사용하기 위해 사용해서는 안됩니다.
Berdir

1
@kiamlaluno, 나는 의심 할 여지없이 논란의 여지가 있지만 그 질문은 대답 할 수 없거나, 수다 스럽거나 비현실적이지 않다고 주장합니다. 질문을하는 나의 목적은 다소 익숙한 코드에서 디자인 패턴이 어떻게 사용되는지 더 잘 이해하는 것입니다.
Matt V.

답변:


10

시작해야 할 곳은 핵심 그 자체와 패턴에 영향을주는 것입니다. -Larry Garfield (Crell)의 훌륭한 글은 Drupal Watchdog 기사 에서 찾을 수 있습니다 .

관찰자, 방문자 및 엿보는 톰

Drupal은 실제로 Observer와 Visitor의 두 가지 패턴을 기반으로 구축되었지만 이름으로 부르지는 않습니다. 대신 후크라고합니다. hook_node_load(), hook_user_login()등은 본질적으로 노드와 사용자에 대한 관찰자입니다. hook_form_alter(), hook_node_view(), 등, 본질적으로, 방문자. Drupal은 두 가지를 구별하지 않기 때문에 일부 후크는 두 패턴 모두로 간주 될 수 있지만 원칙은 동일합니다.

공장 및 명령

팩토리 패턴에는 몇 가지 변형이 있지만 모두 동일한 아이디어로 요약됩니다. 한 객체, 클라이언트는 다른 객체, 팩토리에 논리 조각의 적절한 구현을 요청하지만 어느 것이 어떤 것인지 신경 쓰지 않습니다. . 결정은 공장에 달려 있습니다. 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.
     }

이 새로운 설정에서 메뉴 라우터는 더욱 복잡해집니다. 그러나 그에 대한 응답으로 페이지 콜백은 페이지 콜백이 전달 된 노드를 가져옵니다. 그것은 우리에게 많은 혜택을줍니다.

파산으로 이동 (r)

일반적인 접근 방식 중 하나는 브로커 또는 중재자 개념에 대한 변형입니다. 이 디자인에서 개체는 다른 개체의 정보를 직접 요청하지 않습니다. 대신에 주입되었을 수있는 중개 오브젝트를 대신하여 요청합니다. 여전히 첫 번째 객체가 적극적으로 정보를 요청해야한다는 것을 의미하지만, 정보를 요청해야하는 무수한 다른 객체가 아니라 중재자 객체에만 밀접하게 연결되어 있습니다. 즉, 다른 시스템이 변경되면 중재자와 접촉하는 모든 시스템이 아니라 중재자 만 업데이트하면됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.