私はOOP/OODにはかなり新しく、学ぶことがたくさんあることを実感していますので、SOコミュニティに彼らの意見を聞きたいと思います。これは、電子商取引サイトのオブジェクト指向設計ですか?
がCREATE TABLE `categories` (
`id` int(11) unsigned NOT NULL auto_increment,
`name` varchar(255) default NULL,
`parent_id` int(11) default NULL REFERENCES categories(`id`),
`lft` int(11) default NULL,
`rght` int(11) default NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `products` (
`id` int(11) unsigned NOT NULL auto_increment,
`name` varchar(255) default NULL,
`artist_id` int(11) default NULL REFERENCES artists(`id`),
`description` text default NULL,
`category_id` int(11) default NULL REFERENCES categories(`id`),
`status` enum('in stock', 'pre-order', 'out of stock') NOT NULL,
`price` decimal(6,2) default NULL,
`picture` varchar(255) default NULL,
`picture2` varchar(255) default NULL,
PRIMARY KEY (`id`)
);
オンラインストアがされています
基本的に、私は次のCREATE文で説明CakePHPのMVCフレームワーク、そして私はちょうど2つのモデル、カテゴリーや製品を使用している建物だオンラインストアを、使用しています包含することを行く:
- 音楽
- のCD
- のDVD
- アパレル
- パーカー
- Tシャツ
- ベビードール
- 帽子
- 長袖Tシャツ
- その他マーチ
- ステッカー
- ポスター
- トートバッグ
- ダウンロード
- 着メロ
- MP3ファイル
これは基本的にカテゴリツリーの構造ですが、今後新しいカテゴリを追加することもできます。現在、すべての製品はProductクラスオブジェクトと同等に扱われ、category_idは異なるタイプの製品を区別する唯一の方法です。オンラインストアはサイトの1つのセクションにすぎません。残りのサイトには、アーティストのバイオグラフィーやディスコグラフィーなどの情報が含まれています。私はモデル/テーブルも持っています:アーティスト、アルバム、トラック。
これは良いアプローチですか?または、私はCD/Tシャツ/ MP3 /のための別のサブクラスを作成する必要がありますか... Productクラスを継承していますか?私はトラック内の各音楽CDをディスコグラフィーのエントリにリンクして、トラックのリストや製品の説明のためのその他の情報を自動的に生成したいと思います。
これは良いことではない場合、どうしたらいいですか?また、どのようなメソッド/プロパティを自分のCategory/Productクラスに含めるべきですか?カテゴリツリーの葉ノードにのみ商品を表示する必要がありますか?
編集:
明らかにこのデザインは不完全です。シリルが指摘したように、製品。価格フィールドが欠落しており、売り上げの引当金はまだありません。私は実際には&がストアのそれらの側面を実装するように設計する最良の方法を実際に試してみようとしています。ほとんどの場合、私はという別のモデル(注文)を持っていますが、実際に注文を処理するということは、配送先と注文内容に基づいて異なる送料を適用しているためです。
私はあなたの主要な製品タイプごとにサブクラスを作成するのが好きです。あなたは、着信音のようなものと、サブクラスの恩恵を受ける可能性のある出荷可能な製品のために、十分に違ったやり方をしています。しかし、ちょうど私の2セント。 –