在类实例化上验证

时间:2012-08-30 03:23:32

标签: php validation constructor

当我实例化一个新对象时,我应该如何处理在验证方面传入的参数?

我猜测只是假设进入的参数很好是不安全的,但我认为验证应该分成另一层?

例如,如果一个类需要一个开始时间和结束时间,那么该类应该需要的东西:

  • start_timeend_time都是有效的日期时间对象
  • start_time应该在end_time
  • 之前

任何可以在类构造函数中验证的方向,如果有的话,以及有关验证应该发生的任何一般信息都会有所帮助。

值得注意的是我正在尝试使用MVC结构。

2 个答案:

答案 0 :(得分:0)

您将问题标记为。两者都是松散类型的语言,不会将变量和参数强制为特定类型。根据您对这些值的处理方式,这很好。有些时候,你必须检查,否则你的代码会产生错误。两种语言都提供了这样做的方法。

回答你的问题:是的,可以在构造函数上验证你的数据。但它也很无聊和混乱,所以不要到处都这样做。当完全时,您应该这样做,取决于您的代码的结构,以及如何在更高级别处理错误和异常。

答案 1 :(得分:0)

数据验证是domain objects的责任,data mappers是模型层的一部分。

不,你不应该在构造函数中进行任何计算。构造函数应该只为本地变量赋值。您应该验证 setters 中的信息,或者使用单独的公共方法。

此外,您不应将验证与数据完整性检查混淆(例如“用户必须拥有唯一的电子邮件”)。这些应由存储抽象结构(如{{3}})执行和/或由存储介质强制执行。从域对象保存信息时,存储抽象结构可能会遇到错误。在这种情况下,他们将错误状态分配给域对象。

根据应用程序的结构,错误状态(由验证问题和数据完整性冲突引起的错误状态)可能会被临时处理或暂时存储在某处,例如:在会话中。