一、需求调研及分析
对于电子商务销售的广义商品主要分为两种:1、无形商品和服务的电子商务;有形商品和服务的电子商务。
无形商品和服务一般包括:
1)在线订阅。分为免费订阅和收费订阅;
2)特殊信息收费方式。一般分为免费信息和特殊信息,使用下载方式提供;
3)在线服务。每月收取固定的费用,为消费者提供各种在线服务的方式,比如QQ会员,邮箱包月,杀毒包月等;
4)在线娱乐。包括网络游戏的按月、按时收费等。
有形商品和服务一般表现为网上销售。
二、产品抽象设计
产品目录及产品价格不在本文讨论范围内。
根据需求,具体到实际类型的各种“商品”有很多种类型,其属性差异很大,所以在设计上考虑到以后的扩展性,将商品设计成为继承的方式。
如上图所示。设计一个抽象类Product,放置商品的公共属性(部分),左边为有形商品,命名为
SalesProduct,有形商品包含高度、宽度、长度和重量等无形商品不具备的属性;右边为无形商品,包括在线订阅、在线服务,信息下载等。
所有关系都是泛化关系,一对一。
对于一般的网上商城的设计,只需设计SalesProduct即可,但对于电子商务产品而言,则需要考虑以后的
扩展性。
由于产品的抽象,所以在对产品的创建考虑使用工厂模式。
public class ProductFactory {
private static ProductFactory productFactory=null;
private ProductFactory(){}
public ProductFactory getInstance(){
if(productFactory==null){
productFactory =new ProductFactory();
}
return productFactory;
}
public Product makeProduct(Integer productType){
//根据产品类型返回相应的产品
return null;
}
}
OK。下一步让我们继续分析SalesProduct更加具体的内容。
三、产品详细设计
下图是www.joyo.com的影视产品详细页面,由于比较长,所以我只贴出第一页,详细可见下面链接:
图中用红色圈圈圈住的部分分别为产品标题、演员&导演、价格区、送货方式、用户评分(一种C2B方式)、促销推荐、描述(及其它属性)。
还有不在图中的信息有:内容介绍、购买此商品的顾客也购买了、查看此商品的顾客也查看了、产品参数、本片的主要演员的其它作品、常见问题、用户评论、您可以用以下几种方式找到此商品。
噢!内容太多了。怎么着手呢?
我们分析的思路应该考虑那些是产品本身的属性、那些是关系密切的外部实体,那些是关系较松散的外部实体。
经过分析的内容分类如下:
您也许会奇怪,我为什么始终都没有将价格放入到产品本身呢?因为就电子商务的销售而言,价格是变化很频繁、而且同一个商品会有多种价格(会员等级)、并和各种的促销形式、进货价格等挂钩。所以如果直接做为产品的自有属性将大大降低了灵活性,导致很多业务都无法实现(或者很困难)。
考虑到篇幅和重点。本文只讨论产品本身的属性设计。
对于一个商城而言,产品种类很多,各类产品的相关属性各种各样,如电影会涉及到演员&导演、一些特定的产品参数,如视频格式、音频格式等。
而有一些属性则是所有产品都共有的,比如产品标题、描述、内容介绍等。
所以在设计上需要考虑到这两类属性的区别。
我将之区分为公共属性和自定义属性。
公共属性将放入SalesProduct表,自定义属性则设计如下:
设计考虑,所有Attribute都必须有一个或者多个Options(否则状态为不可用),每个
Option都有类型、值、名称和是否缺省等属性。产品只会指向Option,关系是多对多。
这样,我们就可以增加演员Attribute。
(演员在影视管理系统中是实体,在电子商务销售系统则只是一个值对象了)
在演员Attribute下增加梁朝伟、徐静蕾等演员(Option)。
然后将伤城这个产品和该Option进行关联。
产品参数等属性类似。
但是,我们也发现,对于自定义属性而言,有些属性是比较重要的,有些是不重要的。
比如演员,不单是放在标题下这个醒目的地方,而且还有业务挖掘——本片的主要演员的其它作品。
所以,需要对自定义属性进行进一步的配置。但是这就不属于自定义属性本身的范畴了。
我们将会另行设计一个实体来表达这种业务。