设计将过滤器动态应用于产品列表

时间:2018-07-30 16:48:57

标签: java oop design-patterns

在以下情况下,我需要您的一些意见来决定正确的方法。

我目前正在开发电子商务应用程序(在线购物网站)。在这里,我必须在应用程序的主页上显示商店中可用产品的列表。最终用户可以将过滤器(包括/排除)应用于产品列表,以便仅显示满足所应用过滤器的产品。

因此,我的问题是关于将这些过滤器应用于Java层产品的正确设计。请注意,我将所有数据保存在Java层的内存中(哈希图)。我只想在此内存数据存储中应用从用户界面作为输入传递的过滤器,并返回过滤后的结果。

后端:托管在Tomcat上的Java应用程序。此应用程序运行着一个定期线程,该线程每30秒从文件系统读取/刷新一次产品数据,并将其保存在Java进程的内存中。

前端:Nginx上托管的React应用程序。对后端服务器进行剩余调用以获取数据。

我考虑的方法:

创建一个名为“ FilteredProducts”的类,该类具有属性(例如过滤条件)。使用策略模式对每种可能的过滤条件进行不同的实现,并根据作为输入传递的过滤条件将过滤条件应用于产品。

如果有任何建议的方式来处理此要求,谁能指导我?高度赞赏任何输入。请在这种情况下告诉我是否需要更多信息。

1 个答案:

答案 0 :(得分:-1)

您可以创建一个接口或抽象类过滤器,并且可以为每个过滤器元素创建一个实现或扩展interdace / superclass的特定类。 然后,您可以实施matchs方法并检查哪些文章符合条件(例如:)

public interface FilterCriteria() {
 public List<ShopElement> getMatchedProducts(int minPrice, int maxPrice);
}

public class PriceFilterCriteria implements FilterCriteria() {
  @Override
  public List<ShopElement> getMatchedProducts(int minPrice, int maxPrice) {
    List<ShopElement> matchedProducts = new ArrayList<>();
    foreach(ShopElement se : YourDataSource.getAllElements() ) {
         if(se.getPrice() > minPrice && se.getPrice() < maxPrice) {
         matchedProducts.add(se);
         } 
     }  
  }
}

此模式实际上称为过滤器模式。 您的策略模式方法可能有效,但在这种情况下,我认为这是一种“错误放置”的方法,因为我认为策略模式主要用于更改客户端中的具体实现,而不是用于组合各种跨领域的过滤器。 / p>