【问题标题】:Dynamically applying filter to list of products in ecommerce application将过滤器动态应用于电子商务应用程序中的产品列表
【发布时间】:2013-06-15 01:19:27
【问题描述】:

我需要您的一些意见来决定以下案例中的正确方法。

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

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

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

  1. 当用户在页面上选择不同的条件时,动态生成 SQL 查询(通过附加带有所需 where 子句的字符串)并在每个请求上触发生成的 SQL。

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

如果有更好的方法来处理这个要求,任何人都可以指导我吗? 任何输入都受到高度重视。 如果在这种情况下需要更多信息,请告诉我。

谢谢。

【问题讨论】:

  • 我会选择第二个选项。首先,它会提高应用程序的速度,因为您不必为每个请求生成 SQL。其次,它不易受到 SQL 注入的影响......
  • 您的电子商务应用程序使用 jpa?商店手续?还是完全是一个新项目?
  • @nachokk :这是一个新项目。我对JPA一无所知。会有用吗?它是否提供 API 来根据某些业务逻辑过滤结果集?

标签: java sql algorithm e-commerce


【解决方案1】:

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

我不喜欢您的第二个选项,因为存储过程通常是用我认为比 java 更糟糕的语言编写的。这是纯粹的观点,但这是我的观点。它们也不是数据库不可知论者。

或者,您可以为此使用 JPA。比如有Hibernate Filters

【讨论】:

    【解决方案2】:

    适用于像您这样的网站的最佳做法是不要更改查询以检索要出售的不同商品,而是提供所有相同的商品,但更改它们在网站上显示的顺序。

    因此,如果用户想要价格为 100 美元到 500 美元的商品,您仍然会显示 100 美元以下和 500 美元以上的商品,但该范围内的商品会首先出现,然后以某种随机顺序显示超出该范围的商品。或者,如果有多个条件,您可以显示满足除一个条件之外的所有条件的项目。

    这也解决了用户要求超过 500 美元的咖啡杯的问题。如果没有匹配项,您不会为用户提供 0 项可供选择的物品,而是给他们一些其他物品,优先考虑任何价格的咖啡杯。向用户展示没有要购买的物品会让他们失去看到想要的东西的机会。

    您可以通过您提到的任何一种方式来实现这一点,除非您更改“order by”子句。

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

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

    如果它是一个人或 Java 开发人员的小团队,不要指望他们也是 Java 和 SQL/数据库方面的专家。发挥团队的优势。

    【讨论】:

      猜你喜欢
      • 2021-03-15
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 2017-03-05
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多