Form对象是否应该具有显示和处理的双重职责?

时间:2010-02-10 23:51:12

标签: forms oop class-design

我有一个带有Form类的原型,它自动生成一个HTML表单,现在我将一些处理功能插入到原型中。

为表单生成HTML的同一Form类是否也处理表单?这样做会使课程有两个不同的,不同的......相关的目的。

这应该是一个类,还是应该分成两个类?

2 个答案:

答案 0 :(得分:1)

在OOD中,Single Responsibility Principle通常建议一个类只有一个改变的理由。您描述的示例似乎显然属于想要混合表单生成和处理的情况。

但是,在您的示例中,您似乎有三个不同的职责:

  1. 表单的结构表示,包括字段定义等
  2. 表单到HTML的过程,将表单转换为HTML表示。
  3. 表单提交流程,用于评估提交的数据并生成“填写”表单记录(甚至可能是第四个责任区域)。
  4. 当然,可以将任意数量的这些责任混合在一起,但是 - 我认为你会发现分离可能会创造价值,包括:

    • 实施脱钩
    • 未来的可扩展性点
    • 将数据表示与处理操作分离

答案 1 :(得分:1)

取决于“处理表单”的含义。例如,创建一个具有方法 CreateChildForm()的类和另一个方法 ProcessChildForm(form)。

是完全合理的。

创建自己处理的表单也是合理的。例如 Form.Process()的。

换句话说,这取决于你想要做什么。