PHP OOP设计模式:我应该创建两个单独的类来进行注册和表单验证吗?

PHP OOP设计模式:我应该创建两个单独的类来进行注册和表单验证吗?,php,forms,oop,design-patterns,Php,Forms,Oop,Design Patterns,我有两种类型的注册,注册A和注册B,每个都有一些相同的字段和一些不同的字段。我将创建抽象类注册,A和B都将拥有自己的类,这些类将从注册扩展而来 我是否应该创建一个单独的验证类,其中包含扩展的单独的a和B验证类?或者有更好的模式用于类似的事情吗?我将注册和验证作为单独的实体是的 编辑:此外,可能包含一些对您有价值的信息。是的,您可能需要单独的注册和验证实体。您建议的模式,带有一个抽象基和一个扩展它的ValidationA和ValidationB,将起作用。如果您没有真正的“默认”验证,您可以只验证

我有两种类型的注册,注册A和注册B,每个都有一些相同的字段和一些不同的字段。我将创建抽象类注册,A和B都将拥有自己的类,这些类将从注册扩展而来


我是否应该创建一个单独的验证类,其中包含扩展的单独的a和B验证类?或者有更好的模式用于类似的事情吗?

我将注册和验证作为单独的实体是的


编辑:此外,可能包含一些对您有价值的信息。

是的,您可能需要单独的注册和验证实体。您建议的模式,带有一个抽象基和一个扩展它的ValidationA和ValidationB,将起作用。如果您没有真正的“默认”验证,您可以只验证一个接口,并让ValidatingA和ValidatingB实现它,然后您就可以使用运行时多态性调用适当的验证方法


我开始意识到的一件事是,你可以问,问,讨论,沉思这些你想要的东西,但你永远不会知道,直到你尝试它。快速创建一个抽象基类和两个扩展它的基类,看看它是否实现了您想要的。如果没有,就重构。当然,你必须考虑技术债务等,但只要给它一个镜头-这是最好的学习方法。< /P> < P>创建一个带有一个方法“ISVALID()”的验证程序抽象类,并扩展到您的需要。 使用validate()方法创建一个类注册,该方法通过Validator对象


它允许使用您编写的任何验证器验证任何内容。

您可以为每个字段类型(电子邮件、电话、登录、密码)创建自己的验证器/显示字段类。你只做一次。然后,您可以创建一个表单类,该类将封装表单中的所有标准“脏”工作(验证字段、显示表单、显示验证消息,如果需要等等)

用法示例:

$form = new Form($action, $method); // $action and $method - html attributes of the form
$form->addField('Your e-mail', 'mail'); // field label (for the form) and field type (for the form and for validation)
$form->addField('Login', 'login');

$form->process(); // show form to the user or process it if already submited and sent
您的福利:

  • 您只需创建一次字段验证器
  • 您创建的表单类将一次处理所有表单
  • 您只需定义表单字段,如下所示

  • 这是一个很好的网站,展示了如何构建可扩展表单验证类:是的,唯一的问题是,对于每个类型a和B,一些字段将被验证为相同的,因此我将创建基本验证程序类抽象,并根据需要进行扩展。谢谢,实际上,我在基本validate类中有多个验证方法,因为每个A和B都有一些相同的验证,即validateUsername。扩展之后,我将创建新的特定于类型的验证方法。