我正在为研究目的编写代码,在其中我搜索大量文件并根据它们的相关性对它们进行排名。我将整个过程称为quickSearching,它由两个连续阶段组成 - 首先我搜索文件并检索候选文件列表,然后我对这些候选人进行评分并对其进行排名。
因此,quicksearch只是搜索方法和分数方法的串行组合。 我计划实施各种搜索和评分方法,我想测试所有可能的组合并评估它们,看看哪个是获胜的组合。
由于组合的数量会快速增长,因此编写良好的结构和设计非常重要。我想到了以下设计(我在python中编写代码):
因为我基本上是一名EE工程师,我不知道如何在选项之间进行选择,如果这是CS中常见的问题,那就是琐碎的图案设计。我希望设计的设计有希望:
非常符合代码量,因为一些搜索和评分方法仅仅是一个或两个参数的不同值。
非常模块化且容易出错。
轻松浏览
我应该考虑其他任何考虑因素吗?
这是我的第一个设计问题,因此可能无效或缺少重要信息,如果是,请通知我。
答案 0 :(得分:1)
类经常被过度使用,特别是来自Java和C#等语言的程序员必须使用它们。我建议观看演示文稿Stop Writing Classes。
在决定是否创建课程时,问自己以下问题是有用的:
1)班级需要多种方法吗?
如果该类只有一个方法(除了__init__
),那么你也可以改为使用它。如果它需要在调用之间保持状态,那么使用生成器。如果需要在一个地方创建一些参数然后在别处调用,你可以使用一个闭包(一个返回另一个函数的函数)或functools.partial
。
2)它需要在方法之间共享状态吗?
如果类不需要在方法之间共享状态,那么最好用一组独立函数或更小的类(或某些组合)替换它。
如果两个问题的答案都是肯定的,那就继续创建一个课程。
对于你的例子,我认为选项1是要走的路。搜索者和记分员对象听起来像他们是类,他们只有一个方法,可能称为execute
或run
。改为使它们成为函数。
根据您的使用情况,quickSorter本身可能更适合作为函数或生成器,因此根本不需要任何类。
顺便说一句,Python在函数和指向函数的指针之间没有区别。