2

継承を実装したかったのですが、この記事に従ってデータベース設計を取得できず、次のようにしかモデルを作成できず、記事のように Model/Behaviour の下にファイル InheritBehavior.php を作成しました。継承をサポートするためにこれらのモデルのデータベースを設計する方法

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 で十分にサポートされますか?

4

1 に答える 1

5

並べ替えの答え:いいえ、それは良い考えではありません。

OOP では、継承よりも合成を常に優先することをお勧めします。


それは間違っている。

OOP には、Liskov 置換原理(ダムダウンバージョン: image ) と呼ばれるものがあります。これは、サブクラス化するときに、機能を削除したり、根本的に変更したりしてはならないことを意味します。

また、OOP の例として動物を使用すると、常に恐ろしい結果になります。次のように分類します: クジラ (脚なし)、コウモリ (羽あり)、シラミ (羽なし)。私はあなたが問題を見ていると思います。

そしてもう1つ。CakePHP のユーザーとしては気付いていないかもしれませんが、PHP5 では、変数をprivatepublicまたはとして定義していますprotected。PHP4 スタイルの代わりにvar.

于 2012-06-13T17:35:26.117 に答える