SortFilter 模块
一、概述
承担的需求(主要秘密)
对GoodsPipe传入的商品列表按照竞价规则进行排序,要对于竞价排名的规则进行隐藏
可能会修改的实现(次要秘密)
商品竞价排名可能会有多种附加规则,比如:
- 规则1:按照合作网站的先后顺序排序;
- 规则2: 按照商品发布的日期和时间;
- 规则3:按照商品的销售量。
以上规则可能会需要一种或多种的排列组合(比如先用规则1 筛选再用规则2筛选的结果与先用规则2再使用规则1筛选的结果是不同的)
涉及的相关质量属性
- R1 数据可靠性
- R6 搜索易用性
模块对外接口
- public List
<
GoodsInfo>
doFilter(List<
GoodsInfo>
list){ } ;
二、类的设计
2.1 类图
2.2 类描述
IFilter类
类职责
本类为过滤器接口
类方法
- List
<
GoodInfo>
doFilter(List<
GoodInfo>
):- 职责:定义接口
- 前置条件:无
- 后置条件:无
SortFilter类
类职责
本类的职责是执行竞价排名操作
类方法
- List
<
GoodInfo>
doFilter(List<
GoodInfo>
):- 职责:定义接口
- 前置条件:管道中有待排序的数据
- 后置条件:无
Decorator类
类职责
装饰者
类方法
Decorator(IFilter)
- 职责:构造函数
- 前置条件:IFilter实例被创建
- 后置条件:私有成员IFilter指向SortFilter实例
List
<
GoodInfo>
doFilter(List<
GoodInfo>
):- 职责:根据竞价排名规则进行过滤
- 前置条件:管道中有需过滤的商品信息;
- 后置条件:商品列表中的商品信息按照客户要求的排序规则排列
WebsiteSortFilter类
类职责
对商品列表中的商品信息按照其来源网站的优先级由高到低排序
类方法
WebsiteSortFilter(IFilter)
- 职责:构造函数
- 前置条件:IFilter实例被创建
- 后置条件:Decorator被初始化
List
<
GoodInfo>
doFilter(List<
GoodInfo>
):- 职责:根据竞价排名规则进行过滤
- 前置条件:管道中有需过滤的商品信息;
- 后置条件:商品列表中的商品信息按照客户要求的排序规则排列
List
<
GoodInfo>
sortByWebsiteRank(List<
GoodInfo>
):- 职责:根据竞价排名规则进行过滤
- 前置条件:管道中有需过滤的商品信息;
- 后置条件:商品列表中的商品信息按照客户要求的排序规则排列
DateSortFilter类
类职责
商品列表中的商品信息按照其发布日期由最近发布到最早发布排序
类方法
DateSortFilter(IFilter)
- 职责:构造函数
- 前置条件:IFilter实例被创建
- 后置条件:Decorator被初始化
List
<
GoodInfo>
doFilter(List<
GoodInfo>
):- 职责:根据竞价排名规则进行过滤
- 前置条件:无;
- 后置条件:商品列表中的商品信息按照其发布日期由最近发布到最早发布排序
List
<
GoodInfo>
sortByDateRank(List<
GoodInfo>
):- 职责:根据竞价排名规则进行过滤
- 前置条件:管道中有需过滤的商品信息;
- 后置条件:商品列表中的商品信息按照其发布日期由最近发布到最早发布排序
SaleSortFilter类
类职责
商品列表中的商品信息按照其销售量由最高到最低排序
类方法
SaleSortFilter(IFilter)
- 职责:构造函数
- 前置条件:IFilter实例被创建
- 后置条件:Decorator被初始化
List
<
GoodInfo>
doFilter(List<
GoodInfo>
):- 职责:根据竞价排名规则进行过滤
- 前置条件:无;
- 后置条件:商品列表中的商品信息按照其销售量由最高到最低排序
List
<
GoodInfo>
sortBySaleRank(List<
GoodInfo>
):- 职责:根据竞价排名规则进行过滤
- 前置条件:管道中有需过滤的商品信息;
- 后置条件:商品列表中的商品信息按照其销售量由最高到最低排序
三、重要协作
顺序图
协作描述
- 搜索服务根据用户要求的排序规则创建过滤器
- 搜索服务创建管道
- 搜索服务向管道注册过滤器
- 搜索服务请求管道对商品信息列表进行过滤
- 管道依次请求向自己注册的过滤器对商品信息列表进行过滤
- 过滤器根据用户定义的规则对商品信息列表进行排序,返回排序完毕的数据
- 管道返回排序完毕的数据给搜索服务器
四、设计模式应用
装饰者模式
使用场景:
用户请求对搜索商品的结果进行排序显示
效果:
搜索服务可以选择使用三种排序规则中的一种或多种,也可以选择使用不同排序规则的先后顺序。还可以在不改变原代码的基础上,实现新增排序规则(只要继承Decorator类即可)。可扩展性良好。