【问题标题】:Design pattern for checking multiple conditions检查多个条件的设计模式
【发布时间】:2021-12-30 05:33:38
【问题描述】:

我正在尝试确定是否存在适用于以下场景的设计模式。

我有两种类型的对象,例如 List<JobApplicant> jobApplicants 和 List<Job> jobs,我想选择 JobApplicant 符合条件的所有工作,资格标准可以是多个,例如 JobApplicant 并且工作技能匹配,经验、地点等。可以是多重的。

运行各种资格标准后,我可以获得JobApplicant 符合条件的所有工作列表。我尝试使用简单的资格条件来实现这一点,但是当有新的资格时,条件会不断增加。

是否有任何设计模式可以描述这样的系统和/或帮助使其通用,以便我们可以继续添加更多资格标准来过滤申请人所需的工作。

【问题讨论】:

    标签: design-patterns multiple-conditions


    【解决方案1】:

    这是一个相当广泛的问题,但让我们看看我是否理解正确。所以你想对两个列表应用一组标准吗?

    您可以使用过滤器链来实现此目的。想象一下,你有如下界面:

    interface EligibilityCriterion {
        fun apply(jobs: List<Job>, applicant: JobApplicant): List<Job>
    }
    

    现在您需要实现您拥有的任何资格标准,即每个EligibilityCriterion 接口的实现。单一方法应该返回申请人仍然有资格的Jobs。

    在另一个类中,您将获得EligibilityCriterion 的所有实现,如下所示(为简单起见,我假设为 Spring,但您可以通过任何其他适用于您的情况的方式获得它们):

    @Service
    class JobsService(private val eligibilityCriteria: List<EligibilityCriterion>) {
    
       fun findJobsForApplicant(jobs: List<Job>, applicant: JobApplicant): List<Job>{
            eligibilityCriteria.fold(jobs) { jobsFold, eligibilityCriterion -> 
                 eligibilityCriterion.apply(jobsFold, applicant) 
            }
       }
    
    }
    

    这里的想法是您一次应用一个EligibilityCriterion,然后将过滤后的List&lt;Job&gt; 传递给下面的EligibilityCriterion,直到全部应用。最后,您拥有了所有applicant 符合条件的Jobs。

    鉴于您有一个JobApplicants 列表,您需要对其进行迭代并将标准应用于每一个。

    您可以在以下在线资源中阅读更多相关信息:

    P.S.:对不起 Kotlin + Spring 代码,但我觉得用代码而不是文字更容易解释和理解这些东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-30
      • 2018-03-23
      • 1970-01-01
      相关资源
      最近更新 更多