0

我有一个可以使用某些用户首选项启动的应用程序。为此,我使用ConfigParser内置包中的类ConfigParser。我派生了一个ConfigParser实现__getitem__and__setitem__方法的子类,以便获取/设置一些首选项项,而不必每次都指定它们各自的部分、子部分和选项。

由于其中一些首选项(工作目录、日志记录级别...)对我的代码非常敏感,因此我想在每次修改其中一项时检查它们。为此,我目前考虑两种方法:

  1. 编写一个方法来检查我的偏好中的每一项,每次修改其中一项。非常简单但效率不高,因为每次更改一项时都会检查整个首选项。

  2. 为每个首选项项目(check_logger、check_working_directory、check_blabla ...)编写一个 check_item 方法,并且每次设置一个项目时,都会使用相应的检查器调用getattr(self,'check_%s' % item)(item)

我倾向于认为第二种方法比第一种方法更好。

你会看到这些设计的替代品吗?

非常感谢您

埃里克

4

1 回答 1

1

根据您的规则的复杂性(以及谁编写/将编写它们),您可以:

  • 将它们实现为纯 Python;
  • 使用像 BPEL 这样​​的(业务)规则语言。Python 在PyPEL项目中对此提供了支持;
  • 使用基于约束的系统来检查它的值集是否直接或间接违反任何规则。例如,您可以看一下python-constraint。这更像是一种“求解器”——但它会在给定您的一组“首选项”时通知您是否没有解决方案。

对于简单到中等复杂的约束,我会优先选择。但是请注意,就像我在评论中解释的那样,我认为“一次检查一项”的方法是无效的——除了最简单的情况。这是因为某些项目值可能有效也可能无效,具体取决于一个或多个其他项目的值。跟踪值的变化可能间接破坏哪些规则并不容易。

于 2013-06-23T08:35:50.807 回答