我对 OOP/OOD 很陌生,我意识到我有很多东西要学,所以我想请教 SO 社区的意见。
基本上,我使用的是 CakePHP 的 MVC 框架,而我正在构建的在线商店只使用 2 个模型,Category 和 Product,由以下 CREATE 语句描述:
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`)
);
在线商店将包括:
- 音乐
- 光盘
- DVD
- 服饰
- 连帽衫
- T 恤
- 长袖 T 恤
- 娃娃装
- 帽子
- 其他商品
- 贴纸
- 海报
- 手包
- 下载
- 铃声
- MP3
基本上,这就是类别树的结构,尽管我们将来可能会添加新的类别。现在,所有产品都被视为 Product 类对象,它们的 category_id 是区分不同类型产品的唯一方法。在线商店也只是该网站的一部分。该网站的其余部分包含艺术家简历和唱片等信息;因此,我也有以下模型/表格:Artist、Album、Track。
这是一个好方法吗?或者我应该为从 Product 类继承的 CD/T-shirts/MP3s/... 创建单独的子类?我想将商店中的每张音乐 CD 链接到唱片条目,以自动生成曲目列表和产品描述的其他信息。
如果这不是处理事情的好方法,你会怎么做呢?另外,我的类别/产品类中应该包含哪些方法/属性?我应该只在类别树的叶节点中列出产品吗?
编辑:
显然这个设计是不完整的。正如 Cyril 指出的那样,缺少 Product.price 字段,并且仍然没有关于销售的规定。实际上,我仍在努力研究如何最好地设计和实施商店的这些方面。最有可能的是,我将只使用另一个名为Orders的模型,但实际上处理订单变得更加复杂,因为我们根据运输目的地和订单包含的内容应用不同的运费。