CommentFilter 模块
一、概述
承担的需求(主要秘密)
评论处理功能需求包括发布评论、评论管理、敏感词处理、水军检测、商家定制候选词汇检查。功能关联模块包含CommentFilter模块,该模块接收由CommentpPipe传递过来的评论信息(Comment),过滤后将评论信息返回给pipe并启用通知模块(CommentNotifier)让其通知商家或管理员。 模块CommentFilter与CommentPipe共同完成评论过滤、通知Notifier进行通知操作等功能,在CommentFilter模块详细设计文档主要讨论CommentFilter承担的主要职责:敏感评价处理、水军检测、商家定制候选词汇检查。关于 评论发布、评论管理、具体通知操作这些与CommentFilter有关联但是并非本模块实现的职责在此不作详细讨论。 CommentFilter承担的主要职责:敏感评价处理、水军检测、商家定制候选词汇检查。
1.敏感评价处理 CommentFilter内含SensitiveFilter和BusinessFilter过滤器子类,分别为敏感词过滤器和商家定制候选词过滤器。CommentFilter接收来pipe的评论信息,SensitiveFilter过滤器进行对敏感词的过滤,即查看是否带有敏感词汇,如果有敏感词汇,则返回pipe一个SensitiveComment类型(定义的敏感评论数据结构,内部记录发布敏感评论的用户信息及评论敏感内容)的评论,并且通过PC连接件通知CommentNotify模块使其通知管理员,如果没有敏感词汇,则把评论返回给pipe。
2.水军检测 CommentFilter含WordFrequencyFilter过滤器子类。当评价被判定为敏感评价之后,系统进行水军检测以判断该用户是否为水军,即用WordFrequencyFilter根据特定词汇和句式出现大于10次,过滤水军评论。 若判定为水军,则将该用户加入水军列表,同时通过PC连接件通知CommentNotify模块使其通知管理员
3.商家定制候选词汇处理 如果没有敏感词汇,则把评论返回给pipe,然后pipe再次用BusinessFilter进行检测是否带有商家定制候选词汇,如果有则通过PC连接件通知相关商家,最后返回Comment给pipe。
用例图设计
可能会修改的实现(次要秘密)
- 水军判定标准的可扩展性(目前是特定词汇特定句式出现十次以上)
- 敏感评价处理方式的可扩展性(目前是查找敏感词汇表中是否有词汇出现在评论中)
- 候选词汇、敏感词汇的扩展
- 通知策略的变化(现在是发现敏感评论或候选词汇则传递给pc连接件启用Notify模块进行对管理员或商家通知)
涉及的相关质量属性
R13 敏感词汇检测并通知
C25: 系统可以检测评论中的敏感词汇,通知管理员审核.
C26: 可以运行时修改敏感词汇表
R14 水军检测
C27: 对于输入敏感词的用户,检测其是否为水军.如果是则通知管理员
R15 通知商家
C28: 出现商家指定词汇时,通知商家.
R16 通知规则的可拓展性
C29: 允许添加新的通知规则,添加要在15人/月内完成
C30: 增加新的条件不能影响搜索业务的运行
注:具体通知操作为Notify模块职责,CommentFilter模块中不作为重点讨论。
模块对外接口
供接口
FilterResult doFilter(List
需接口
CommentNotifyService.notify(User receiver,Message message)
二、类的设计
2.1 类图
2.2 类描述
CommentFilter类
类职责
本类为评论过滤器接口
类方法
- List
<
Comment>
doFilter(List<
Comment>
):- 职责:定义过滤器接口
- 前置条件:无
- 后置条件:无
SensitiveFilter类
类职责
进行敏感词检测及过滤
类方法
- List
<
Comment>
doFilter(List<
Comment>
):- 职责:定义接口
- 前置条件:管道中有待检测敏感词汇的评论
- 后置条件:无
Decorator类
类职责
装饰者模式中的装饰者,含敏感词汇检测后需要进行检测过滤的子类
类方法
Decorator(CommentFilter)
- 职责:构造函数
- 前置条件:CommentFilter实例被创建
- 后置条件:私有成员CommentFilter指向SensitiveFilter实例
List
<
Comment>
doFilter(List<
Comment>
):- 职责:根据装饰者过滤器的过滤条件进行评论过滤
- 前置条件:管道中有需过滤的评论信息;
- 后置条件:评论按照过滤器过滤条件过滤完毕
BusinessFilter类
类职责
对评论列表中的评论进行商家指定候选词汇的过滤
类方法
BusinessFilter(CommentFilter)
- 职责:构造函数
- 前置条件:CommentFilter实例被创建
- 后置条件:Decorator被初始化
List
<
Comment>
doFilter(List<
Comment>
):- 职责:判断评论中是否有商家制定词汇,进行过滤
- 前置条件:管道中有需过滤的评论;
- 后置条件:含商家制定词汇的评论被过滤出来
WordFrequencyFilter类
类职责
水军检测。检测评论中特定词汇特定句式是否超过可被认为为水军的标准,并对评论进行过滤。
类方法
WordFrequencyFilter(CommentFilter)
- 职责:构造函数
- 前置条件:CommentFilter实例被创建
- 后置条件:Decorator被初始化
List
<
Comment>
doFilter(List<
Comment>
):- 职责:根据水军检测规则进行过滤,即检测评论中特定词汇特定句式是否超过可被认为为水军的标准
- 前置条件:无;
- 后置条件:水军评论被过滤掉,评论中的特定词汇特定句式不超过水军判定标准
PC类
类职责
连接件。负责Call CommentNotify模块中的通知管理员或商家的方法
类方法
callNotify(Comment ,people):int
- 职责:通知CommentNotify模块使其调用通知管理员或商家的方法
- 前置条件:存在需要被通知的评论
- 后置条件:CommentNotify模块接收到调用通知的请求
三、重要协作
顺序图
状态图
四、设计模式应用
装饰者模式
装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
适用场景 CommentFilter运用装饰者模式,支持对检测类型的多样化扩展,当需要再扩展一个检测类型时或给一个检测类型增加职责,装饰者模式让修改更为高效。
优点 Decorator模式比继承更多的灵活性。通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合。
pipe-filter设计风格
commentFilter模块使用了pipe-filter设计模式。模块含有三个具体的过滤器:敏感词汇过滤、商家制定候选词汇过滤、水军检测过滤。分别从管道获取评论信息然后对于过滤对象进行检测。具体步骤为先对敏感词汇进行检测,如果发现是有敏感词汇或者有水军问题存在,则返回SensitiveComment(包含敏感信息提示),并提醒CommentNotify模块进行对管理员的通知,如果发现不是要过滤掉的评论,则将评论返回至管道,再进行商家特定词汇检测。按照《POSA(面向模式的软件架构)》里的说法,管道过滤器(Pipe-And-Filter)应该属于架构模式,因为它通常决定了一个系统的基本架构。管道过滤器和生产流水线类似,在生产流水线上,原材料在流水线上经一道一道的工序,最后形成某种有用的产品。在管道过滤器中,数据经过一个一个的过滤器,最后得到需要的数据。这对评论过滤器设计来说是高效且安全的,因为如果一个被设定为水军的评论,在第一道过滤器就被隔离了,不会进行下面的过滤器检测,提高了时间效率。且pipe-filter将数据流传递与过滤操作分离,提高安全性。
策略设计模式
策略模式是对算法的封装,它把算法的责任和算法本身分割开,委派给不同的对象管理。策略模式通常把一个系列的算法封装到一系列的策略类里面,作为一个抽象策略类的子类。在commentFilter中,将filter抽象出来,过滤算法由每个具体的filter实现,是一种策略设计模式。使用策略设计模式有易修改性、高复用性等优势。