设计OOP解决方案

时间:2014-01-09 09:56:29

标签: python oop

我正在为研究目的编写代码,在其中我搜索大量文件并根据它们的相关性对它们进行排名。我将整个过程称为quickSearching,它由两个连续阶段组成 - 首先我搜索文件并检索候选文件列表,然后我对这些候选人进行评分并对其进行排名。

因此,quicksearch只是搜索方法和分数方法的串行组合。 我计划实施各种搜索和评分方法,我想测试所有可能的组合并评估它们,看看哪个是获胜的组合。

由于组合的数量会快速增长,因此编写良好的结构和设计非常重要。我想到了以下设计(我在python中编写代码):

  1. 一个quickSearcher类,它将接收指向搜索者和记分员函数的指针
  2. 将接收搜索者对象和记分员对象的quickSearcher类
  3. 将从搜索者类和记分员类继承的quickSearcher calss
  4. 因为我基本上是一名EE工程师,我不知道如何在选项之间进行选择,如果这是CS中常见的问题,那就是琐碎的图案设计。我希望设计的设计有希望:

    1. 非常符合代码量,因为一些搜索和评分方法仅仅是一个或两个参数的不同值。

    2. 非常模块化且容易出错。

    3. 轻松浏览

    4. 我应该考虑其他任何考虑因素吗?

    5. 这是我的第一个设计问题,因此可能无效或缺少重要信息,如果是,请通知我。

1 个答案:

答案 0 :(得分:1)

类经常被过度使用,特别是来自Java和C#等语言的程序员必须使用它们。我建议观看演示文稿Stop Writing Classes

在决定是否创建课程时,问自己以下问题是有用的:

1)班级需要多种方法吗?

如果该类只有一个方法(除了__init__),那么你也可以改为使用它。如果它需要在调用之间保持状态,那么使用生成器。如果需要在一个地方创建一些参数然后在别处调用,你可以使用一个闭包(一个返回另一个函数的函数)或functools.partial

2)它需要在方法之间共享状态吗?

如果类不需要在方法之间共享状态,那么最好用一组独立函数或更小的类(或某些组合)替换它。

如果两个问题的答案都是肯定的,那就继续创建一个课程。

对于你的例子,我认为选项1是要走的路。搜索者和记分员对象听起来像他们是类,他们只有一个方法,可能称为executerun。改为使它们成为函数。

根据您的使用情况,quickSorter本身可能更适合作为函数或生成器,因此根本不需要任何类。

顺便说一句,Python在函数和指向函数的指针之间没有区别。