2013-06-18 24 views
2

我需要您的一些输入来决定以下情况下的正确方法。动态地将过滤器应用于电子商务应用程序中的产品列表

我目前正在研究电子商务应用程序(一个在线购物网站)。 在这里,在应用程序的主页上,我必须显示商店中可用产品的列表。

最终用户可以在产品列表中应用过滤器,以便只显示满足所应用过滤器的产品(像选定公司的显示产品,价格范围等)。

所以,我的问题是关于应用过滤器的逻辑。 我有以下想法来实现这一要求。

  1. 作为用户选择页面上的不同指标分析,生成SQL查询动态(通过附加一个字符串所需的where子句)和火对每个请求生成的SQL。

  2. 已经在数据库中设置了所有可能的SQL组合(例如在存储过程中)。当用户更改标准时,请选择存储过程中适当的SQL来运行。

任何人都可以请指导我,如果有任何更好的方法来处理此要求?任何输入都被高度关注。 请让我知道,如果在这方面需要更多的信息。

谢谢。

+0

我会选择第二个选项。首先它会提高应用程序的速度,因为您没有为每个请求生成SQL。第二它不容易SQL注入... –

+0

您的电子商务应用程序使用jpa? storeprocedures?或者它完全是一个新项目? – nachokk

+0

@nachokk:这是一个新项目。我不知道JPA。它会有用吗?它是否提供API来根据某些业务逻辑过滤结果集? – Shinchan

回答

0

我会做第一个,但是你必须警惕SQL注入攻击。

我不喜欢你的第二个选项,因为存储过程通常是用我认为比java差的语言编写的。这是纯粹的意见,但这是我的看法。它们也不是数据库不可知的。

或者,您可以使用JPA。例如,有Hibernate Filters

0

对于像您这样的网站而言,一些效果很好的做法是不要更改查询来检索要出售的不同商品,而是提供所有相同的商品,但要更改其在网站上的显示顺序。

因此,如果用户想要的商品价格为100美元至500美元,您仍然会显示价格低于100美元和500美元以上的商品,但是该范围内的商品会先出现,然后是某种随机顺序之外的商品。或者,如果有多个标准,则可以显示符合所有标准的项目。

这也解决了用户要求咖啡杯超过500美元的问题。如果没有匹配,你不会给用户0件物品进行选择,但是你可以给他们一些其他物品,而不偏向任何价格的咖啡杯。向用户呈现没有要购买的项目是他们可能看到他们想要的东西的机会。

除了您正在改变“order by”子句之外,您可以用您提到的任何一种方式实现此功能。

我个人的偏好是不使用存储过程。

但是,如果您正在与一个专家组在数据库中使用的大型团队合作,该团队可以优化数据库使用并使存储过程保持最佳状态,这可能是一种选择。

如果只有一个人或一小群java开发人员,不要指望他们成为Java和SQL/Database的专家。发挥你的团队的优势。

相关问题