`

关于产品动态属性的做法

    博客分类:
  • Java
阅读更多

      最近在做一个电子商务网站( http://www.legendesign.net/ ),暂时叫 LegendShop吧,网站支持多个商家发布产品,类似 于淘宝等商城,不同点在于 LegendShop的整个界面内容是可以自定义的,没有任何植入式的主网站的广告。

     产品有一些固定属性,但是每个商家所销售的产品是不一样的,例如卖家具的有大小,颜色等,卖家电的有大小,品牌等。因此要为每个产品增加动态属性,商家在 建立产品的时候可以自定义该产品的属性。

     思路是每个产品对应 0..n个动态属性,每个属性有 0..n个选项。


 

为了满足需求上要求,有些属性要求客户是直接填写的,有些是多选项,有些是要单选的。因此设计了 4中属性类型 Select(选择框) , Text(文本框) , Radio(单选框) , CheckBox(多选框)。

         方法一:可以将以上实体定义为一个数据库表,每次读取产品的时候再装载动态属性,需要做表关联。此方法需要增加 2张表,但方便于采用 SQL做数据统计。 但每个产品都建立一次动态属性显然是没有必要而且很麻烦,因为相关的产品的动态属性是一致的,没有必要重复创建。 为了用户更容易增加动态属性,最好增加一个动态属性的模板,每次新建产品的时候直接指定采用那一个属性模板,但是模板一旦使用则不能轻易删除,否则动态属性就不见了。另外客户在订购的时候将填写或者选择这些动态属性,并将结果存入产品订购表。

      方法二:采用对象数据库的方式,将动态属性以对象形式存到产品表中。此法不需要新建产品属性表和属性选项表,查询产品的时候可以直接把动态属性查询出来,但需要自己动手将对象和页面功能对应起来。 该字段可以直接存放 Java的对象,或者将对象转化为 JSON对象或者 XML再行存放。 如果采用 Oracle的话,那需要采用 BLOB的字段来存放对象,或者采用 CLOB来存放 JSON XML。下面用代码来展示如何实现方法二的。

 

属性类型定义:

public enum ModelType {

    Select , Text , Radio , CheckBox ;

}

 

属性定义:

public class Model implements Serializable {

 

    private String id ;

    /**

     * may by select text radio checkbox

     */

    private ModelType type ;

 

private Item[] items ; // 属性选项

 

选项定义:

public class Item implements Serializable {

 

    private boolean nullEnabled = false ;

 

    private boolean selected = false ;

 

    private String key = null ; // 后台定义的选项关键字

 

private String value = null ; // 用户输入的属性值

 


      界面说明:后台可以自定义上面提到的 4种属性类型。点击提交的时候通过 JSON将属性数组保存为产品表中的属性。当客户浏览产品的时候可以看到后台动态属性的定义,当然客户是不知道这些属性是动态增加的还是固定的。他们订购的时候选择对应的选项再提交,如果需要对选项做 validate的话,那在 Item中增加 needValidate属性,再页面中再行判断。

     

提交之后以 JSON方式交给 DWR处理,直接得到 Model[]数组。或者采用 DOM的方式得到 XML传到后台的 controller进行处理。下面的例子是采用 JSON的方式实现的。具体看附件。

 

DWR的配置文件,否则不能通过 DWR来传输对象。

      < dwr:configuration >

            < dwr:init >

            < dwr:converter id = "date" class = "bingo.vasms.bizstreet.dwr.CalendarConverter" />

        </ dwr:init >

            < dwr:convert type = "date" class = "java.util.Calendar" ></ dwr:convert >

        < dwr:convert type = "bean" class = "com.done.entity.Model" ></ dwr:convert >  

        < dwr:convert type = "bean" class = "com.done.entity.Item" ></ dwr:convert >

        < dwr:convert type = "enum" class = "com.done.entity.ModelType" ></ dwr:convert >

      </ dwr:configuration >

 

 

  • 大小: 6.6 KB
  • 大小: 23.1 KB
0
0
分享到:
评论
3 楼 onecan 2011-04-30  
我们没有对产品属性进行全文检索
2 楼 danny99899 2010-07-12  
补充:
如果正如刚刚所说的,用数据表 来实现key-value 这样的结构的话,那么这个索引表应该怎么样去维护呢?
1 楼 danny99899 2010-07-12  
想请教一下楼主,关于第二种方式,我在CSDN程序员杂志里看过一位架构师,是taobao 的,他也提到用xml 来描述产品属性是比较好的,因为xml 的特点容易扩展

但有一个问题就是怎么样实现全文搜索??
例如有一件T Shirt
包含的属性有:
大小 , 颜色,款式等
如果把这些属性都以 xml格式 存放到数据库里的话那怎么搜索?(这里的xml 格式跟第二个方案里所提到的面向对象的情况相同)

我记得那篇文章里提到有一个东西,不知道是否为全文搜索关键所在,他是把数据实体用xml 格式来存放,然后参照 Key-Value 结构的方式,建立针对该实体XML数据的 N张 索引表,反正需要按照多少个属性来搜索,就有多少张表,

请问楼主都是这样实现的吗???

如果有机会望得到楼主的指点~小弟QQ:86508962
(PS:我都系广州噶,越秀区呢边)

相关推荐

    商品属性增加及修改

    在IT行业中,商品属性是电子商务系统中至关重要的组成部分,它定义了产品的具体特征,帮助消费者做出购买决策。本文将深入探讨“商品属性增加及修改”的主题,主要关注如何通过前端技术实现这一功能,而不涉及后端...

    jQuery 仿京东商城产品展示切换及放大效果

    jQuery是一个广泛使用的JavaScript库,它极大地简化了DOM操作、事件处理、动画以及Ajax交互,使得开发者可以更加高效地构建动态网页。 首先,要实现产品展示的切换效果,我们可以利用jQuery的`$(selector).click()`...

    Dynamics of large networks 大型网络的动态.doc

    近期的研究发现了一些反直觉的模式,这些模式挑战了关于随时间变化的网络基本结构属性的传统假设。通过对这些模式的分析,研究人员提出了克罗内克图生成模型(Kronecker Graph Model),用以解释支配网络演化的内在...

    影响搜索引擎优化效果的四十五个重要因素

    11. **Alt标签中出现关键词**:alt属性提供图片的文字描述,对于无法查看图片的用户或搜索引擎来说至关重要。 12. **comment中出现关键词**:虽然不是决定性的因素,评论中的关键词可能会被搜索引擎用来评估页面内容...

    放大镜代码

    - `&lt;dl class="J_TWidget hidden" data-widget-config="..." data-widget-type="Popup"&gt;`,这个弹窗用于显示更多关于产品的信息(如价格、销售数量等)。 - `&lt;h2&gt;&lt;strong&gt;ȫCSSȫ...&lt;/strong&gt;&lt;span&gt;&lt;em&gt;37.00Ԫۣ...

    JSP制作企业宣传网站包括数据库简单做法源码

    - 可能涉及到的企业宣传网站的数据库设计可能包括公司介绍、产品信息、新闻动态等表,每个表都有相应的字段存储数据。 7. **文件组织结构**: - 项目通常有明确的目录结构,如WEB-INF目录下存放web.xml配置文件,...

    Proe扭转弹簧运动仿真做法教程.pdf

    本文将基于“Proe扭转弹簧运动仿真做法教程.pdf”这一资料,深入探讨如何在ProE中实现扭转弹簧的运动仿真,为读者提供一种参考思路。 ### 一、ProE中的弹簧仿真基础 在ProE的机构仿真模块中,虽然提供了压簧和拉簧...

    如何用烧录器批量烧录序列码?

    通常的做法是将算法编写为一个动态链接库(.DLL文件),然后将其放置于烧录器软件指定的目录下。 以SmartPRO2008为例,具体的步骤如下: 1. **实现序列号接口**:根据烧录器厂商提供的API文档,实现序列号生成的...

    使用jsp:include控制动态内容的方法

    JSP(Java Server Pages)是一种动态网页开发技术,能够让开发者将Java代码嵌入到HTML页面中。...这一点对于开发需要频繁更新数据的应用非常有用,例如,新闻网站、电子商务产品展示以及社交媒体平台的动态内容展示等。

    rabar:使用纯CSS构建的产品页面

    这种做法可以提高页面加载速度,同时对搜索引擎优化(SEO)也十分有利。 首先,我们需要了解HTML(HyperText Markup Language)的基础知识。HTML是网页内容的结构框架,定义了网页的基本元素,如标题、段落、图片、...

    随着滚动条,小广告也滚动的做法.rar

    在网页设计中,小广告是一种常见的元素,它们通常被用于推广产品或服务。"随着滚动条,小广告也滚动的做法"这个主题涉及到的是如何通过CSS和DOM操作来实现广告元素随页面滚动的效果,这种效果也被称为"固定定位"或者...

    C#动态加载组件后如何在开发环境中调试详解

    在C#编程中,动态加载组件是一种常见的技术,它允许程序在运行时根据需要加载和执行代码模块,而不是...通过适当修改加载代码,结合VS IDE的特性,可以实现动态加载组件的调试,这对于提升开发体验和产品质量至关重要。

    magento 前台显示订单文件

    此外,`rel="nofollow"`属性在产品链接中使用,这是SEO优化的一种常见做法,告诉搜索引擎不要追踪这些链接,以免影响网站的权重分配。 ### 总结 Magento的订单展示功能体现了其作为高级电子商务平台的强大之处,...

    电脑商城网站

    6. **产品展示**:产品列表通常采用网格系统,使用CSS的float或display属性来实现多列布局。每个产品项应包含图片、标题、价格和购买按钮。CSS动画可以增强用户体验,如滑动展示、淡入淡出效果。 7. **购物车和结账...

    10-3 关于《基金管理公司特定客户资产管理子公司风险控制指标管理暂行规定》的起草说明1

    风控指标的控制机制参照了证券公司和期货公司的做法,强调专户子公司的董事长承担风险控制的最终责任,通过动态监控、敏感性分析和压力测试等手段,提高风险管理水平,确保风险控制指标的有效执行。 综上所述,这一...

    高级软件工程第3章-面向对象建模.ppt

    3. 它是从用户的角度而不是从开发者的角度描述软件产品的需求,分析产品所需的功能和动态行为; 4. 它是由软件需求到最终实现的第一步,它驱动了需求分析之后的各阶段的开发工作; 参与者(Actor)是指系统以外的,...

    Gridview用法大总结

    这可以通过RowDataBound事件实现,根据条件动态设置行的BackColor属性。 #### 二十二、设置数据行的事件 为数据行添加事件处理程序可以增强交互性。例如,可以在RowCommand事件中处理行级别的操作。 #### 二十三...

    管理学考试题及答案(全)参照.doc

    2. **管理的二重性**:管理具有自然属性和社会属性两重性,自然属性体现在管理过程的普遍性和规律性,社会属性则强调管理在特定社会环境中的特殊性。 3. **高层管理者决策**:高层管理者主要负责制定长远全局性决策...

    三维展示BIM模型--php嵌套标签

    具体做法是在产品详情页面中添加一个新的标签页,并将上述`&lt;iframe&gt;`代码嵌入其中。例如: ```html ...

Global site tag (gtag.js) - Google Analytics