正在验证类实例化


Validating on class instantiation

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

我猜,仅仅假设输入的参数是好的是不安全的,但我认为验证应该分为另一层?

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

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

任何可以在类构造函数中验证的方向,如果有的话,以及关于验证应该在哪里进行的任何一般信息,都将是有用的。

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

您将问题标记为php和javascript。两者都是松散类型的语言,不会强制您的变量和组织是特定类型的。根据你将如何处理这些价值观,这很好。其他时候,您必须进行检查,否则您的代码将产生错误。这两种语言都提供了实现这一点的方法。

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

数据的验证由域对象负责,域对象是模型层的一部分。

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

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

根据应用程序的结构,错误状态(由验证问题和数据完整性冲突引起的错误状态)可以不固定地处理,也可以临时存储在某个地方,例如:会话中。