【发布时间】:2021-11-25 16:02:49
【问题描述】:
我有一个需要通过不同类型过滤器处理的广告系列列表,例如平台过滤器、应用程序过滤器、CampaignRunning 过滤器,以检查当前日期是否应介于开始日期和结束日期等之间。
理想情况下有 15 - 20 个不同的过滤器,我使用 Intercept Design Pattern 管理它们。
在应用过滤器之前列表可能为空,那么我应该在过滤器链中使用NullValueFilter 吗?
再次应用一些过滤器列表后可以为空,以检查我是否也应该使用策略设计模式注入相同的空或空检查策略?
我通常会更多地考虑设计视角来管理此类案例。我想知道我的想法是否正确,或者我在这方面过度设计了。
一些伪代码来说明场景 -
Class NullValueFilter : IFilter {
Execute(List<CampaignList> campaignList) {
if(campaignList != null && campaignList.Count == 0) {
return false;
}
return true;
}
}
Class PlatformFilter : IFilter {
Execute(List<CampaignList> campaignList) {
if(campaignList != null && campaignList.Count == 0) {
return false;
}
campaignList = campaignList.Where( x => x.Platform == 'Mobile');
return true
}
}
Class CampaignRunningFilter : IFilter {
Execute(List<CampaignList> campaignList) {
if(campaignList != null && campaignList.Count == 0) {
return false;
}
// first Fetch campaign start date and end date
campaignList = campaignList.Where( x => x.startdate <= curr_date && x.enddate >= curr_date);
return true
}
}
我可以在这里想到两个选项 -
- 创建一个过滤器基类,可以管理列表的空和空检查。
- 使用构造函数注入在每个过滤器中注入空值过滤器实例,并调用该空值和空值检查方法。
【问题讨论】:
-
@DocBrown 伪代码添加供您参考。
-
好的,我看到你的“空值过滤器”没有过滤任何东西,它只是检查空列表,返回真或假。但是这将如何影响过滤呢?
-
...和第二个问题:为什么所有这些检查都需要空列表?在我看来,如果没有检查,所有这些过滤器都可以正常工作:空列表输入给出空列表。
-
首先,Null Value Filter 将只检查 null 并决定是否应该执行下一个过滤器或中断链。其次,我只想避免在空列表上执行下一个过滤器链。
标签: oop design-patterns object-oriented-analysis system-design architectural-patterns