我有越来越多的通用可重用验证检查列表,类似于下面的列表:
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']
我的问题是,是否有一个更好的更成熟的模式我可以引用来解决这个问题?
答案 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]
在验证之前,只需将此嵌套结构展开为平面列表。