2012-06-13 3 views
2

상속을 구현하고 싶습니다. this article에 따라 데이터베이스를 만들지 못했지만 다음과 같이 모델을 만들 수만 있었고 모델/동작 아래에 파일/모델로 InheritBehavior.php를 만들었습니다. 조. 어떻게 상속이에 대한 데이터베이스 설계 (여러 테이블 상속를) 무엇Cakephp에서 상속을 구현하는 방법

class Animal extends AppModel{ 
    var $name='Animal'; 
} 

App::import('Model', 'Animal'); 
class Mammal extends Animal{ 
public $actsAs = array('Inherit'); 
} var $name= 'Mammal'; 

} 


App::import('Model', 'Animal'); 
class Insect extends Animal{ 
    var $name='Insect'; 
} 

Animal: id, age 
Mammal: id, no_of_legs ('age' is common) 
Insect: id, no_of_wings ('age' is common) 

을 지원하기 위해이 모델에 대한 데이터베이스를 설계합니다.

이 유형에 대해 연관 대신에 상속을 사용하는 것이 좋습니다 (hasOne 및 belongsTo 사용). 이는 cakephp에서 잘 지원됩니까?

답변

5

대답 대답 : 아니요, 좋은 생각이 아닙니다.

OOP에서는 상속에 비해 항상 컴포지션을 선호하는 것이 좋습니다.


잘못하고 있습니다.

OOP에는 Liskov substitution principle (에 대해 버전 : image)이라고하는 것이 있습니다. 즉, 하위 분류시 기능을 제거하거나 근본적으로 변경해서는 안됩니다.

또한 동물을 OOP 예제로 사용하면 항상 끔찍하게 끝납니다. 뒤에 오는 것 분류 : 고래 (다리 없음), 박쥐 (날개가있다), 이가 (날개 없음). 나는 당신이 문제를 보았다고 생각한다.

그리고 다른 하나. CakePHP 사용자라면 PHP5에서 변수를 private, public 또는 protected으로 정의했을 것입니다. PHP4 스타일 대신 var.

+1

+1 덤 다운 버전 이미지 : D – Deadlock

관련 문제