it-swarm.dev

클래스를 사용하여 모듈을 빌드하는 모범 사례

게으른/자동로드가 Drupal 7)에 있고 모듈을 클래스로 작성하려고합니다. 일부 모듈 (contrib 또는 core)을보고 싶습니다. 그것의 훌륭한 직업.

수업을 갈고리로 통합하는 창의적인 방법이 있습니까? 각 기능을 ctools 플러그인으로 구현합니까?

모든 행인은 D7에 자동/지연 로딩 클래스/인터페이스에 대한 모듈 files[] 파일에 새로운 .info 선언이 있습니다. . info 파일 작성 (Drupal 7.x) .

다음은 Drupal 커뮤니티 객체 지향 관점에서의 중복 프로그래밍 )에서 동기 부여와 헌법을 얻는 좋은 예입니다.

19
electblake

모듈은 클래스가 아닙니다 Crell이 먼저 읽어야합니다.

가장 큰 OOP 부분 Drupal 7은 새로운 데이터베이스 추상화 계층 (매우 동일한 Crell 및 기타에서 설계))입니다. 재사용.

예를 들면 다음과 같습니다.

여전히 논란의 여지가있는 논의정보 숨기기 입니다. DBTNG는 클래스 속성을 보호하고 직접 액세스를 허용하지 않음으로써이를 구현합니다. 반면에 hook_query_alter ()가 있으며 다양한 참조 getter 메서드를 사용하여 거의 자유롭게 변경할 수 있습니다.

16
Berdir

이것은 흥미로운 질문입니다.

Drupal 모듈이라는 클래스의 아이디어는 매우 흥미 롭습니다. 그러나 D7 모듈에서도 이름으로 확인되는 후크 함수를 구현하기 때문에 모듈에 대한 클래스를 작성하더라도 여전히 호출 함수를 호출하여 호출해야합니다.

그러나 많은 모듈이 내부적으로 클래스를 사용하며 이러한 클래스를 통해 기능을 노출합니다. 가장 확실한 예는보기입니다. 보기에 좋은 곳일 것입니다. 그러나 많은 모듈이 자체 방식으로 클래스를 사용하므로 뷰를 통해 학습 한 내용이 항상 적용 가능한 것은 아닙니다.

3
Jeremy French

Entity API (contrib 모듈)를 사용하면 각 엔티티 유형에 대해 "엔티티 클래스"를 선언 할 수 있으므로 엔티티와 관련된 모든 코드 (생성,로드, 저장, 액세스 등)가 클래스에 들어갈 수 있습니다 (유기적 방법 참조). 예를 들어 그룹은 그렇게합니다.

즉, 그것을 과도하게하지 마십시오. ctools 플러그인은 필요할 때 (다음 뷰, 패널 또는 규칙을 작성하는 경우) 좋은 방법이지만 이데올로기 적 순도를 위해 어디에서나 클래스를 사용하는 것은별로 좋지 않습니다.

2
Bojan Zivanovic