Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms 表单对象是否应该承担显示和处理的双重责任?_Forms_Oop_Class Design - Fatal编程技术网

Forms 表单对象是否应该承担显示和处理的双重责任?

Forms 表单对象是否应该承担显示和处理的双重责任?,forms,oop,class-design,Forms,Oop,Class Design,我有一个带有表单类的原型,可以自动生成HTML表单,现在我正在将一些处理功能插入原型中 生成表单HTML的表单类是否也应该处理表单?这样做会使这个类有两个不同的,不同的…但相关的目的 这应该是一个类,还是分成两个类?在OOD中,通常建议一个类应该只有一个改变的理由。您描述的示例显然属于这样一种情况,即您可能不希望将表单生成和处理混合在一起 然而,在您的示例中,您似乎有三个不同的职责: 表单的结构表示,包括字段定义等 将表单转换为HTML表示的表单到HTML过程 表单提交过程,评估提交的数据并生成

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

生成表单HTML的表单类是否也应该处理表单?这样做会使这个类有两个不同的,不同的…但相关的目的

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

在OOD中,通常建议一个类应该只有一个改变的理由。您描述的示例显然属于这样一种情况,即您可能不希望将表单生成和处理混合在一起

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

  • 表单的结构表示,包括字段定义等
  • 将表单转换为HTML表示的表单到HTML过程
  • 表单提交过程,评估提交的数据并生成“填写”的表单记录(这甚至可能是第四个职责领域)
  • 当然,可以将这些责任组合在一起,但是-我想你会发现分离可以创造价值,包括:

    • 实现的解耦
    • 未来的扩展点
    • 数据表示与处理操作的分离

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

        创建自己处理的表单也是合理的。e、 g.Form.Process()

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