2012-06-13 5 views
2

Я хотел реализовать наследование, Поскольку я следовал this article Я не получал базу данных, я мог только создать модели следующим образом, и я создал файл InheritBehavior.php под Model/Behavior, как в статья. Так как разработать базу данных для этих моделей для поддержки наследованияКак реализовать Наследование в 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) 

Что такое дизайн базы данных для этого (Multiple Таблица наследования).

Это хорошая идея использовать Наследование вместо ассоциаций (используя hasOne и принадлежит для этого типа). Будет ли это хорошо поддерживаться cakephp?

ответ

5

Сортировка ответа: нет, это не очень хорошая идея.

В ООП рекомендуется всегда предпочитать композицию по наследованию.


Вы делаете это неправильно.

В ООП есть то, что мы называем Liskov substitution principle (для немой вниз версии: image). Это означает, что вы не должны удалять или кардинально изменять функциональность при подклассификации.

Кроме того, использование животных в качестве примера ООП всегда заканчивается ужасно. Классифицируйте следующее: кит (без ног), летучая мышь (есть крылья), вши (без крыльев). Наверное, вы видите проблему.

И еще одно. Как пользователь CakePHP вы можете не знать об этом, но в PHP5 мы определяем переменные как private, public или protected. Вместо PHP4-стиля var.

+1

+1 Для немой версии изображения: D – Deadlock