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


19

게으른 / 자동로드가 Drupal 7에 있으므로 모듈을 클래스로 구축하기 시작하고 있으며 훌륭한 작업을 수행하는 일부 모듈 (contrib 또는 core)을보고 싶습니다.

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

모든 전달자는 D7 에 자동 / 지연 로딩 클래스 / 인터페이스 용 files[]모듈 .info파일에 새로운 선언 이 있음을 알아야합니다 . .info 파일 작성 (Drupal 7.x) .

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

답변:


16

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

Drupal 7에서 가장 큰 OOP 부분은 새로운 데이터베이스 추상화 계층 (매우 동일한 Crell 및 기타에서 설계)입니다. 이는 재사용이 가능해야하는 많은 패턴을 구현합니다.

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

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


훌륭한 답변, 모듈 코드를 구성 할 때 내 생각을 업데이트하는 많은 훌륭한 자료!
electblake

3

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

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

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


통찰력에 감사드립니다. Drupal에 제대로 등록하려면 hook_functions가 여전히 필요하다고 가정했지만 모듈이 어떻게 그것을 구현하는지 궁금합니다. I의 의견 모듈 살펴 보겠습니다 (희망 잃어 버리지) - 당신이 패턴을 더 이상 고립 된 경우 / 예제를 찾을 경우 찾아 답을 업데이트하십시오 : D
electblake

2

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

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

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