哪个Python模式用于动态选择和排序已过滤的函数列表?

时间:2016-08-18 14:07:15

标签: python design-patterns

我有越来越多的通用可重用验证检查列表,类似于下面的列表:

 1. check_product_name()
 2. check_product_price_within_range()
 3. check_product_expiration_date()
 4. check_product_sizes()
 5. check_foo()
 6. check_bar()
 7. ...

我的客户名单越来越多。客户端A可能希望实现验证1-5,而客户端B可能希望实现验证3,6和4(按此顺序)。

现在我正在考虑一个简单的方法,如下所示。 (伪代码,实际配置将存储在数据库中)

client_a_validations = ['check_product_name', 'check_product_price_within_range', 'check_product_expiration_date', 'check_product_sizes', 'check_foo']
client_b_validations = ['check_product_expiration_date', 'check_foo', 'check_product_sizes']

我的问题是,是否有一个更好的更成熟的模式我可以引用来解决这个问题?

1 个答案:

答案 0 :(得分:1)

据我所知,Django可以成为一个很好的例子。 Django有两个实体 - 表单字段和验证器,一个字段可以有多个验证器。

from django import forms

class MyForm(forms.Form):
    even_field = forms.IntegerField(validators=[validate_even, max_value])

所以它与你的情况类似,你选择了正确的模式。

如果验证器的数量非常大,您可以定义一组验证器。

例如:

check_all_product_specs = [check_product_name, check_product_price_within_range,
check_product_expiration_date]

client_a_validations = [check_all_product_specs, check_bar]

在验证之前,只需将此嵌套结构展开为平面列表。