单体继承 vs 模块化基于成员的面向对象设计

3
我在做设计决策方面遇到了困难。
我有一个 Python 类,用于处理表单数据,这些数据与其他表单数据非常相似,因此我正在将其重构为自己的对象,以便其他类可以重复使用它。
问题是,应该将此表单处理器作为类的成员还是类的父类。
如果术语不正确,请纠正我,以下是我犹豫不决的内容:
庞大的继承类:
(原文未提供具体内容)
class FormProcessor(object):
    def post(self):
        # ... process form data

class PageHandler(RequestHandler,FormProcessor):
    def get(self):
        # show page

或者更模块化的基于成员的类:
class FormProcessor(object):
    def process(self):
        # ... process form data

class PageHandler(RequestHandler):
    def __init__(self):
        self.processor = FormProcessor()
    def get(self):
        # show page

    def post(self):
        self.processor.process(self.postdata)

我倾向于第二种方法,但我不确定在可维护性方面未来可能会有什么后果。我倾向于这种方法的原因是,我认为处理应该是一个发生的动作,而不是PageHandler的主要部分,因此将其设置为成员对象而不是父对象是有意义的。
当类继承功能时,实例上会出现很长的函数列表,这让我感到不安,因此我正在尝试更好地对它们进行分类,以便程序易于理解并反映所建模的系统。
期待您对此问题的任何建议。
1个回答

7

建议采用模块化方法。采用模块化方法的一些优点包括:

  • 使您的代码更易读,即更清楚 PageHandler 和 FormProcessor 的作用
  • 更容易有效地编写 单元测试 以及这两个类
  • 通过使用不同的 PageHandler 实现,更容易在以后更改 PageHandler 的行为

总的来说,坚持一个类只做一件事的想法;当维护软件时,这样更容易看到您正在处理什么,并使编写更容易(然后您只需要考虑一个上下文)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接